这个程序是要实现单词次数的统计,然后输出次数,可是我的程序在输出时总是输出了重复的单词,麻烦有人看下怎么改
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Scanner;
import java.util.StringTokenizer;
public class lab5 {

public static void main(String[] args) throws IOException {
int m =0;
System.out.println("请输入一行文本:");
BufferedReader bf = new BufferedReader(new InputStreamReader(
System.in));
String str = bf.readLine();
String[] result = str.split("\\W+");
StringTokenizer tokens=new StringTokenizer(str);
int n = tokens.countTokens();
String[] str1 = new String[n];
String[] a ;
int flag;
int count[]=new int[str1.length];
for(int i=0;i<str1.length;i++)
{
count[i]=0;
}
for(int i=0;i<result.length;i++)
{
System.out.println(result[i]);
}
a=result.clone();
for(int j=0;j<result.length;j++)
{
flag=1;

for(int k=0;k<a.length;k++)
{
if(a[k].equalsIgnoreCase(result[j])&&flag==1)
{
flag=0;
str1[m]=a[k];
m++;
}

}

}
for(int i =0;i<str1.length;i++)
{
for(int j=0;j<a.length;j++)
{
if(a[j].equalsIgnoreCase(str1[i]))
count[i]++;
}
}
System.out.println("words Occurrences");
System.out.println("-------------------");
for(int i=0;i<str1.length;i++)
{
System.out.println(str1[i]+" "+count[i]);
}
System.out.println("-------------------");

}
}

解决方案 »

  1.   

    Mark一下,楼主的这段代码并不能保证str1里单词的唯一性,所以会有重复的输出.for(int j=0;j <result.length;j++) 

    flag=1; for(int k=0;k <a.length;k++) 

    if(a[k].equalsIgnoreCase(result[j])&&flag==1) 

    flag=0; 
    str1[m]=a[k]; 
    m++; 
    } } 
      

  2.   

    public static void main(String[] args) throws IOException{

            String[] input = new BufferedReader(new InputStreamReader(System.in)).readLine().split("\\W+");
            Map<String, Integer> contain = new HashMap<String, Integer>();

            for (String ts : input){
    contain.put(ts, contain.get(ts) == null ? 1 : contain.get(ts) + 1);
    } for (String s : contain.keySet()){
    System.out.println(s + " : " + contain.get(s));
    }}
      

  3.   

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;public class Cal { public static void main(String[] args) throws IOException { 
    int m =0; 
    System.out.println("请输入一行文本:"); 
    BufferedReader bf = new BufferedReader(new InputStreamReader( System.in)); 

    String str = bf.readLine(); 
    String[] result = str.split("\\W+"); 

    StringTokenizer tokens=new StringTokenizer(str); 
    int n = tokens.countTokens(); 
    String[] str1 = new String[n]; 
    String[] a = new String[result.length]; 
    int flag; 
    int count[]=new int[str1.length]; 

    for(int i=0;i <str1.length;i++){ 
    count[i]=0; 


    for(int i=0;i <result.length;i++){ 
    System.out.println(result[i]); 
    }

    // a=result.clone(); 
    for(int i=0;i<result.length;i++){
    a[i] = result[i];
    }
    for(int j=0;j <result.length;j++){ 
    flag=1; 
    for(int k=0;k <a.length;k++){ 
    if(a[k].equalsIgnoreCase(result[j])&&flag==1){ 
    flag=0; 
    str1[m]=a[k]; 
    m++; 
    }
    }


    for(int i =0;i <str1.length;i++){ 
    for(int j=0;j <a.length;j++){ 
    if(a[j].equalsIgnoreCase(str1[i])) 
    count[i]++; 


    System.out.println("words Occurrences"); 
    System.out.println("-------------------"); 
    for(int i=0;i <str1.length;i++){ 
    System.out.println(str1[i]+" "+count[i]); 

    System.out.println("-------------------"); 

    }
    怎样好像可以
      

  4.   

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;public class Cal { public static void main(String[] args) throws IOException { 
    System.out.println("请输入一行文本:"); 
    BufferedReader bf = new BufferedReader(new InputStreamReader( System.in)); 

    String str = bf.readLine(); 
    String[] result = str.split("\\W+"); 

    StringTokenizer tokens=new StringTokenizer(str); 
    int n = tokens.countTokens(); 
    String[] str1 = new String[n]; 
    String[] a = new String[result.length]; 
    int count[]=new int[str1.length]; 

    for(int i=0;i <str1.length;i++){ 
    count[i]=0; 


    for(int i=0;i <result.length;i++){ 
    } for(int i=0;i<result.length;i++){
    a[i] = result[i];
    } for(int i =0;i <result.length;i++){ 
    for(int j=0;j <a.length;j++){ 
    if(a[j].equalsIgnoreCase(result[i])) 
    count[i]++; 


    System.out.println("words Occurrences"); 
    System.out.println("-------------------"); 
    for(int i=0;i <result.length;i++){ 
    System.out.println(result[i]+" "+count[i]); 

    System.out.println("-------------------"); 

    }
    修改过的,试试