所以我一直在Java中创建一小段代码,从用户那里获取输入计算大写,小写和其他部分(例如空格,数字,甚至括号),然后返回每个部分的数量。用户。
我遇到的问题是说我输入“Hello There”它会在Hello中的“o”后停止计算点数。所以在第一个单词之后。
代码
import java.util.Scanner;
public class Example {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int upper = 0;
int lower = 0;
int other = -1;
int total = 0;
String input;
System.out.println("Enter the phrase: ");
input = scan.next();
for (int i = 0; i < input.length(); i++) {
if (Character.isUpperCase(input.charAt(i))) upper++;
if (Character.isLowerCase(input.charAt(i))) lower++;
else other++;
total = upper + lower + other;
}
System.out.println("The total number of letters is " + total);
System.out.println("The number of upper case letters is " + upper);
System.out.println("The number of lower case letters is " + lower);
System.out.println("The number of other letters is " + other);
}
}
答案 0 :(得分:2)
查找并返回此扫描仪的下一个完整令牌。一个 完整标记之前和之后是匹配的输入 分隔符模式。
问题是next
没有看到&#34;那里&#34;自&#34; Hello World&#34;不是一个完整的标记。
将next
更改为nextLine
。
建议:使用调试器,您可以快速找到问题,如果您有疑问,请参阅文档,他们会帮您解决。
答案 1 :(得分:1)
问题是next()
仅返回空格之前的行,但nextLine()
将读取整行。
所以改变
scan.next();
到
scan.nextLine();
答案 2 :(得分:0)
您需要将next()
更改为nextLine()
- 它会读取所有行
答案 3 :(得分:0)
正如其他人所说。您应该从scn.next
更改为scn.nextLine()
。但为什么?这是因为scn.next()
只有在遇到空格时才会读取,并且它会停止读取。因此,无法读取空格后的任何输入。
scn.nextLine()
读取,直到遇到换行符(即enter
)。
答案 4 :(得分:0)
您可以尝试使用正则表达式:
public static void main(String[] args) {
String input = "Hello There";
int lowerCase = countMatches(Pattern.compile("[a-z]+"), input);
int upperCase = countMatches(Pattern.compile("[A-Z]+"), input);
int other = input.length() - lowerCase - upperCase;
System.out.printf("lowerCase:%s, upperCase:%s, other:%s%n", lowerCase, upperCase, other);
}
private static int countMatches(Pattern pattern, String input) {
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
return count;
}