嗨,我想写一个程序,它将执行以下操作 提示用户输入数据字符串 使用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());
}
}
只计算单词的总数,但从这一点开始,我被卡住了
答案 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