当前位置: 首页 > 知识库问答 >
问题:

(Java)程序在我要输入字符串的地方忽略扫描器

葛海阳
2023-03-14

我有以下3种方法:

>

  • 方法:获取文本并将其单词拆分为特定字符串,然后将其放入字符串数组中。

    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+");
    }
    

    方法:计算数组中仅由大小写字母组成的字符串的数量。

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

    现在问题来了,如果我调用第三个方法首先通过扫描器生成一个文本。

    但不知怎么的,代码只是跳过了行text=input.nextLine();并抛出异常(MSG)字符串为空。执行文本“Enter a text:”,后面直接跟着异常。但我无法输入任何文本。

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

    我还有另外两个方法,其中input.nextline可以很好地工作。

  • 共有1个答案

    濮君植
    2023-03-14

    我能想到的这种行为的唯一原因是,您可能在前面使用了相同的扫描器对象来扫描一个整数(代码中没有显示)。

    如果你做了,

    >

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

  •  类似资料:
    • 问题内容: 我正在编写一个使用Event类的程序,该类中有一个日历实例和一个String类型的描述。创建事件的方法使用扫描仪获取月,日,年,小时,分钟和说明。我遇到的问题是Scanner.next()方法仅返回空格之前的第一个单词。因此,如果输入为“我的生日”,则该事件实例的描述就是“我的”。 我做了一些研究,发现人们使用Scanner.nextLine()解决此问题,但是当我尝试这样做时,它只是

    • 我的程序需要接受整数、单个字符或一个特定字符串(本例中我将使用)。虽然每一个都可以用空格分隔,但不需要这样做。 目前,我的解析代码依赖于,如下所示: 目前,我的程序将接受输入像没有任何问题。然而,它也应该接受相同的输入,没有任何空白(),并以相同的方式解释它,并且在我当前的代码中,单个数字被错误地解释为字符。 我觉得原因可能是我使用的正则表达式。但是,添加

    • 我试图让扫描仪在每个@符号上拆分一个字符串,除非转义时(或在一行的开头) 我的RegEx: 从,我的理解,这应该对我的意图有效。 然而,当在扫描仪中使用此模式时,它只是忽略了这样一个事实,即不应将非捕获组计算到分隔符中,只是为了与之匹配,分隔符(要删除/拆分的部分)应仅为“@”。因此,对于以下示例String:“Hello@World“,结果必须是[”Hello“,”World“]。 除了运行以下

    • 问题内容: 我试图找到一种方法来从键盘输入。 我尝试使用: 该方法不存在。 我尝试了作为。但是,它并不总是在每种情况下都可行,因为我从我的方法中调用的另一个方法需要作为输入。因此,我必须找到一种显式将char作为输入的方法。 有什么帮助吗? 问题答案: 你可以从中提取第一个字符: 消耗正好一个字符,你可以使用: 要严格使用一个字符,可以使用:

    • 我在想,当时间限制达到10秒时,我怎么能不按回车键就输入“回车”。 所以我将输入尽可能多的字符,直到时间结束。我想将该字符串保存为“in” 我刚刚发现Robot类可以按enter键,但我认为我使用它的方式不正确。

    • 我在我的第一个java程序中扫描用户输入时遇到了一些麻烦。当我编译并运行它时,会立即提示输入(即命令行停止并闪烁)。当我输入任何东西时,第一行被打印出来,要求我输入一个整数。然后打印第二行,并提示我输入另一个值。 这个程序的输出是我输入的前两个值。这很难解释,但它基本上要求3个输入值,只使用两个。