大写,小写和其他计数器

时间:2014-11-25 13:14:56

标签: java

所以我一直在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);
}
}

5 个答案:

答案 0 :(得分:2)

Scanner#next

  

查找并返回此扫描仪的下一个完整令牌。一个   完整标记之前和之后是匹配的输入   分隔符模式。

问题是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;
}