如何计算String Array中的String repition

时间:2016-02-18 07:03:12

标签: java arrays string

我试图计算一个单词在stdin中重复的次数。

示例输入:

  

这是一个测试,这是

期望的输出:

this 2
is   3 
a    1
test 1

我有int[]来存储wordCount,但我不知道在哪里使用它,int计数只是临时的,所以程序可以运行。

以下是我的参考代码:

import java.util.Scanner;
public class  WCount {

    public static void main (String[] args) {

        Scanner stdin = new Scanner(System.in);

        String [] wordArray = new String [10000];
        int [] wordCount = new int [10000];
        int numWords = 0;

        while(stdin.hasNextLine()){
            String s = stdin.nextLine();
            String [] words =  s.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\\
s+"); //stores strings as words after converting to lowercase and getting rid of punctuation 
            for(int i = 0; i < words.length; i++){
        int count = 0; //temporary so program can run
            for(int  j = 0; j < words.length; j++){
            if( words[i] == words[j] )
        count++;
                    System.out.println("word count: → " + words[i] + " " +  count);
}
               }

    }

5 个答案:

答案 0 :(得分:2)

我会用这样的东西:

import java.util.ArrayList;
import java.util.Scanner;

public class WCount  {

    public static void main(String[] args) {

        Scanner stdin = new Scanner(System.in);

        String[] wordArray = new String[10000];
        int[] wordCount = new int[10000];
        int numWords = 0;           

        while (stdin.hasNextLine()) {
            String s = stdin.nextLine();
            ArrayList<String> noDuplicated = new ArrayList<String>();
            String[] words = s.replaceAll("[^a-zA-Z ]", "").toLowerCase()
                    .split("\\s+"); // stores strings as words after converting
                                    // to lowercase and getting rid of
                                    // punctuation

            //Array that contains the words without the duplicates ones
            for (int i = 0; i < words.length; i++) {
                if(!noDuplicated.contains(words[i]))
                    noDuplicated.add(words[i]); 
            }

            //Count and print the words
            for(int i=0; i<noDuplicated.size();i++){
                int count = 0;
                for (int j = 0; j < words.length; j++) {
                    if (noDuplicated.get(i).equals(words[j]))
                        count++;                    
                }
                System.out.println("word count: → " + words[i] + " "
                            + count);
            }

        }
    }
}

输出:

This is a test, this is is
word count: → this 2
word count: → is 3
word count: → a 1
word count: → test 1

希望它有用!

答案 1 :(得分:1)

这对我有用。虽然遍历完整可能的数组是愚蠢的。使用ArrayList可以更轻松。但是我不确定你是否被允许使用它。

    import java.util.Scanner;

    public class WCount {

        public static void main(String[] args) {

            Scanner stdin = new Scanner(System.in);

            int[] wordCount = new int[1000];
            String[] wordList = new String[1000];

            int j = 0;
            while (stdin.hasNextLine()) {
                String s = stdin.nextLine();
                String[] words = s.split("\\W+");

                for (String word : words) {

                    int listIndex = -1;
                    for (int i = 0; i < wordList.length; i++) {
                        if (word.equals(wordList[i])) {
                            listIndex = i;
                        }
                    }

                    if (listIndex > -1) {
                        wordCount[listIndex]++;
                    } else {
                        wordList[j] = word;
                        wordCount[j]++;
                        j++;
                    }

                }

                for (int i = 0; i < j; i++) {
                    System.out.println("the word: " + wordList[i] + " occured " + wordCount[i] + " time(s).");
                }
            }
        }

    }

输出:

this is a test. this is cool.
the word: this occured 2 time(s).
the word: is occured 2 time(s).
the word: a occured 1 time(s).
the word: test occured 1 time(s).
the word: cool occured 1 time(s).

答案 2 :(得分:0)

您可以在此处使用哈希表。我不会为你编写代码,但这里是简单的伪算法:

if hashTable contains word 
     hashTable.put(word, words.value + 1)
else hashTable.put(word, 1)

对单词数组中的每个单词执行此操作。处理完所有单词后,只需打印哈希表中的每个键(单词)及其值(出现的次数)。

希望这有帮助!

答案 3 :(得分:0)

想出来......简单的方式..

import java.util.Vector;

public class Get{
    public static void main(String[]args){

        Vector<String> ch = new Vector<String>();
        String len[] = {"this", "is", "this", "test", "is", "a", "is"};
        int count;

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

            if(count>0){
                if(!ch.contains(len[i])){
                    System.out.println(len[i] + " - " + count);
                    ch.add(len[i]);
                }
            }
        }
    }
}

Output:
this - 2
is - 3
test - 1
a - 1

答案 4 :(得分:0)

我的实施:

public static void main(final String[] args) {

    try (Scanner stdin = new Scanner(System.in)) {

        while (stdin.hasNextLine()) {
            Map<String, AtomicInteger> termCounts = new HashMap<>();
            String s = stdin.nextLine();
            String[] words = s.toLowerCase().split("[^a-zA-Z]+");

            for (String word : words) {
                AtomicInteger termCount = termCounts.get(word);
                if (termCount == null) {
                    termCount = new AtomicInteger();
                    termCounts.put(word, termCount);
                }
                termCount.incrementAndGet();
            }

            for (Entry<String, AtomicInteger> termCount : termCounts.entrySet()) {
                System.out.println("word count: " + termCount.getKey() + " " + termCount.getValue());
            }
        }

    }
}