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

在java中使用数组只计算字母,java,arrays,string,Java,Arrays,String,您好,我想写一个程序,将做以下事情 提示用户输入数据字符串 使用String类中的charAt(index)方法访问字符串中的每个字符 单独生成字长数的计数 只计算字母(不考虑大小写)并处理空格、数字和标点符号 作为分词符。 显示所有非零长度的字数和长度,以及总字数 例如,让我们说这样一句话:Hello Stack Over Flow 2 4个字母单词 15个字母单词 16个字母单词 共5字 我有这样的想法: Scanner input = new Scanner (System.in)

您好,我想写一个程序,将做以下事情 提示用户输入数据字符串 使用String类中的charAt(index)方法访问字符串中的每个字符 单独生成字长数的计数 只计算字母(不考虑大小写)并处理空格、数字和标点符号 作为分词符。 显示所有非零长度的字数和长度,以及总字数

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

2 4个字母单词 15个字母单词 16个字母单词 共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());







}
扫描仪输入=新扫描仪(System.in);
int[]字数=新int[50];
int i=0,charCount=0,j=0;
int计数器=0;
System.out.println(“输入短语”);
字符串userInput=input.nextLine().toUpperCase();
对于(i=0;i='A'&&charAt 1){
计数器++;
j=1;
}
否则{
i=j;
}
字数[计数器]+;
计数器=0;
}
}
字数[计数器]+;
System.out.println(userInput.length());
}
}

它只计算单词总数,但从这一点开始,我被卡住了。首先,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