我有以下3種方法:(JAVA)計劃在點忽略掃描器我想輸入一個字符串
方法:將一個文本和分裂,特別字符串的話,並把它們放入一個字符串陣列。
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
生成文本。但是不知何故,代碼只是跳過文本= input.nextLine();並拋出異常(MSG)字符串爲空。文本「輸入文本:」被執行,緊接着是異常。但我無法輸入任何文字。
如果我將input.nextLine();
更改爲input.next(),我可以輸入文本,但在此之後,最終會陷入無限循環的異常。
那麼爲什麼我不能輸入文字?
我有另外兩種方法input.nextLine
工作得很好。
您可能先前調用過input.nextInt()或其他東西,並且錯誤地認爲它讀取整數後面的EOL字符。因此,nextLine()的後續調用只讀取行的結尾,並返回一個空字符串。刪除所有經過測試並找到的無關代碼。向我們展示掃描儀定義和使用的代碼。 –
你在哪裏初始化'input'掃描儀?在此之前,你最可能讀的是其他東西,比如整數。 –
可能是http://stackoverflow.com/questions/16040601/why-is-nextline-returning-an-empty-string –