Java 大写、小写和其他计数器
所以我一直在用Java编写一小段代码,从用户那里获取输入,计算大小写和其他部分(如空格、数字、甚至括号),然后向用户返回每个部分的数量 我遇到的问题是,如果我输入“Hello There”,它会在Hello中的“o”之后停止点数。所以在第一个单词之后 代码Java 大写、小写和其他计数器,java,Java,所以我一直在用Java编写一小段代码,从用户那里获取输入,计算大小写和其他部分(如空格、数字、甚至括号),然后向用户返回每个部分的数量 我遇到的问题是,如果我输入“Hello There”,它会在Hello中的“o”之后停止点数。所以在第一个单词之后 代码 import java.util.Scanner; 公开课范例{ 公共静态void main(字符串[]args){ 扫描仪扫描=新扫描仪(System.in); 整数上限=0; 整数下限=0; int-other=-1; int-total
import java.util.Scanner;
公开课范例{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
整数上限=0;
整数下限=0;
int-other=-1;
int-total=0;
字符串输入;
System.out.println(“输入短语:”);
输入=scan.next();
对于(int i=0;i
:
查找并返回此扫描程序中的下一个完整令牌。A.
完整标记的前面和后面是与
分隔符模式
问题是next
没有看到单词“There”,因为“helloworld”不是一个完整的标记
将next
更改为
建议:使用调试器,您会很快发现问题,当您有疑问时,请参阅文档,它们会为您提供帮助。您需要将
next()
更改为nextLine()
-它将读取所有行问题是next()
只返回空格前的行,但nextLine()
将读取整行内容
所以改变
scan.next();
到
正如其他人所说的那样。您应该从
scn.next
更改为scn.nextLine()
。但是为什么呢?这是因为scn.next()
只在遇到空格之前读取,然后停止读取。因此,空格后的任何输入都不会被读取
scn.nextLine()
一直读取,直到遇到换行符(即enter
)。您可以尝试使用正则表达式:
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;
}
谢谢你,我甚至没有看到这一切。
scan.nextLine();
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;
}