使用数组只计算java中的字母

时间:2014-11-30 22:17:36

标签: java arrays string

嗨,我想写一个程序,它将执行以下操作 提示用户输入数据字符串 使用String类中的charAt(index)方法访问字符串中的每个字符 单独地,产生字长数的计数 只计算字母(无论大小写),并处理空格,数字和标点符号 作为单词分隔符。 显示所有非零长度的单词数和长度,以及单词总数

例如,让我们说一句这样的句子:Hello Stack Over Flow

2个4个字母的单词 1个5个字母的单词 1 6个字母的单词 总共5个字

我有这样的事情:

    Scanner input = new Scanner (System.in);
    int [] wordCount = new int [50];
    int i = 0 ,charCount = 0 , j=0;
    int counter=0;

    System.out.println("Enter the phrase");
    String userInput =input.nextLine().toUpperCase();

    for ( i = 0;i < userInput.length(); i++){

        char charAt = userInput.charAt(i);
        if (charAt >= 'A' && charAt <= 'Z') {
            counter++;

        }
        else{
            if(i-j>1){
                counter++;
                j=1;
            }
            else{
                i=j;
            }
            wordCount[counter]++;
            counter=0;
        }
    }

    wordCount[counter]++;
    System.out.println(userInput.length());







}

}

只计算单词的总数,但从这一点开始,我被卡住了

1 个答案:

答案 0 :(得分:1)

首先, Hello Stack Over Flow 是四个字。其次,我会以a-zA-Z的否定作为分裂的模式开始。然后我会按长度排序。接下来,我们可以迭代从第二个开始检查相同大小并获得计数的单词。然后显示。像,

Scanner input = new Scanner(System.in);
System.out.println("Enter the phrase");
String userInput = input.nextLine();
String[] arr = userInput.split("[^a-zA-Z]+");
Arrays.sort(arr, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        if (o1 == null) {
            if (o2 == null) { return 0; }
            return -1;
        } else if (o2 == null) {
            return 1;
        }
        int c = Integer.valueOf(o1.length()).compareTo(o2.length());
        if (c != 0) { return c; }
        return o1.compareTo(o2);
    }
});
System.out.printf("%s contains %d words.%n", Arrays.toString(arr),
        arr.length);
int len = arr[0].length();
int pos = 0;
for (int i = 1; i < arr.length; i++) {
    while (i < arr.length && arr[i].length() == len) {
        i++;
    }
    System.out.printf("%d %d letter words%n", i - pos, len);
    if (i >= arr.length) { i = arr.length - 1; }
    len = arr[i].length();
    pos = i;
}

示例输出(使用您提供的输入)

Enter the phrase
Hello Stack Over Flow
[Flow, Over, Hello, Stack] contains 4 words.
2 4 letter words
2 5 letter words