我有以下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)); }
请注意,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/