Java 大写、小写和其他计数器

Java 大写、小写和其他计数器,java,Java,所以我一直在用Java编写一小段代码,从用户那里获取输入,计算大小写和其他部分(如空格、数字、甚至括号),然后向用户返回每个部分的数量 我遇到的问题是,如果我输入“Hello There”,它会在Hello中的“o”之后停止点数。所以在第一个单词之后 代码 import java.util.Scanner; 公开课范例{ 公共静态void main(字符串[]args){ 扫描仪扫描=新扫描仪(System.in); 整数上限=0; 整数下限=0; int-other=-1; int-total

所以我一直在用Java编写一小段代码,从用户那里获取输入,计算大小写和其他部分(如空格、数字、甚至括号),然后向用户返回每个部分的数量

我遇到的问题是,如果我输入“Hello There”,它会在Hello中的“o”之后停止点数。所以在第一个单词之后

代码

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;
}