java - (Java)程序在我想输入字符串时忽略扫描仪

标签 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));
    }
    

请注意,Algorithmen 是定义前两个(静态)方法的类的名称。

我测试了前两种方法,它们工作得很好。

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

但不知何故,代码只是跳过了行 text = input.nextLine();并抛出异常(MSG)字符串为空。执行文本“输入文本:”,紧随其后的是异常。但我无法输入任何文字。

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

为什么我无法输入文字?

我还有另外两种方法,input.nextLine 工作得很好。

最佳答案

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

如果你这样做了,

  • 只需在 input.nextInt() 之后放置一个 input.nextLine() 即可清除缓冲区

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

关于java - (Java)程序在我想输入字符串时忽略扫描仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34242104/

相关文章:

java - 仅当生成 Schema 时,如何在 JPA 中初始化数据

java - 生产力研究资料

c++ - 使用多个分隔符进行分隔

Java - 使用扫描仪从文本文件读取到二维字符数组

java - 多次输入整数时出现InputMismatchException

java - 安卓谷歌分析 : set Mobile Device Info

java - 如何在 Java 中正确使用 try-catch-finally block ?

c - 如何在c中声明字符串数组

java - 如何在Java中实现IN子句

java - 添加 while 循环,使用户输入的石头剪刀布游戏重复进行,直到用户结束游戏