(Java)程序在我要输入字符串的位置忽略扫描程序

时间:2015-12-12 16:19:23

标签: java string java.util.scanner

我有以下3种方法:

  1. 方法:获取文本并将其单词拆分为特定的字符串并将它们放入字符串数组中。

    public static String[] generateStringArray(String text) {
        if (text.isEmpty()) {
            throw new IllegalArgumentException(MSG_STRING_EMPTY);
        }
    
        // split pattern for all non word characters
        return text.trim().split("\\W+");
    }
    
  2. 方法:计算数组中仅包含大写或小写字母的字符串数量。

    public static int countLowerUpperCaseStrings(String[] stringArray) {
        if (stringArray.length == 0) {
            throw new IllegalArgumentException(MSG_ARRAY_LENGTH_ZERO);
        }
    
        String convertedString;
        int counter = 0;
        char a;
        char b;
    
        for (int i = 0; i < stringArray.length; i++) {
            a = stringArray[i].charAt(0);
            b = stringArray[i].toLowerCase().charAt(0);
    
            if (a == b) {
                convertedString = stringArray[i].toLowerCase();
            } else {
                convertedString = stringArray[i].toUpperCase();
            }
    
            if (stringArray[i].compareTo(convertedString) == 0) {
                counter++;
            }
        }
        return counter;
    }
    
  3. 方法:实际方法,您可以通过扫描仪输入文本并调用其他方法。

    public void numberOfUpperLowerCaseStrings() {
        String text;
        String[] stringArray;
    
        System.out.println("Enter a text:");
        text = input.nextLine();
        stringArray = Algorithmen.generateStringArray(text);
    
        System.out.println(Algorithmen.countLowerUpperCaseStrings(stringArray));
    }
    
  4. 请注意,算法是定义前两个(静态)方法的类的名称。

    我测试了前两种方法,它们工作正常。

    现在问题出现了,如果我调用第三种方法首先通过Scanner生成文本。

    但不知何故,代码只是跳过了行text = input.nextLine();并抛出异常(MSG)字符串为空。文字&#34;输入文字:&#34;执行,直接后跟异常。但我无法输入任何文字。

    如果我将input.nextLine();更改为input.next(),我可以输入文本但在此之后,最终会出现无限循环的异常。

    那为什么我不能输入文字?

    我还有另外两种方法input.nextLine正常工作。

1 个答案:

答案 0 :(得分:0)

我能想到这种行为的唯一原因是您可能使用了相同的Scanner对象来扫描早期的整数(未在代码中显示)。

如果你这样做了,

  • 只需在input.nextLine()input.nextInt()清除缓冲区

  • input.nextInt()替换为Integer.parseInt(input.nextLine())