5 回答

TA貢獻(xiàn)1895條經(jīng)驗 獲得超7個贊
我認(rèn)為你的 . 有問題removeWhiteSpaces(i + 1, text);,如果你在字符串過程中有問題,讀者將無法閱讀下一行。
你不檢查空字符串,你打電話text.charAt(text.length()-1),這也是一個問題。
打印異常,更改您的 catch 塊以寫出異常:
} catch (Exception e) {
e.printStackTrace();
}
原因是在你的while(text.charAt(j) == ' ') {,你不檢查StringBuilder的長度,但你刪除它......

TA貢獻(xiàn)1802條經(jīng)驗 獲得超4個贊
問題不在于您的代碼,而在于對readLine()
方法的理解。在文檔中指出:
讀取一行文本。一行被認(rèn)為是由換行符 ('\n')、回車符 ('\r') 或緊跟換行符的回車符中的任何一個終止的。
https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()
這意味著如果該方法找到一個空行,它將停止讀取并返回null
。
@tijn167 提出的代碼將使用BufferedReader
. 如果您不克制BufferedReader
使用ScanReader
@Abhishek Soni 的建議。
此外,您的方法removeWhiteSpaces()
是檢查空格,而空行不是空格,而是進(jìn)位返回\r
或換行\n
或兩者兼而有之。所以你的條件text.charAt(j) == ' '
永遠(yuǎn)不會滿足。

TA貢獻(xiàn)1803條經(jīng)驗 獲得超6個贊
歸一化功能導(dǎo)致了這種情況。對其進(jìn)行以下調(diào)整應(yīng)該可以解決此問題:
public static String normalize(String string) {
if(string.length() < 1) {
return "";
}
StringBuilder text = new StringBuilder(string.trim());
if(text.length() < 1){
return "";
}
for(int i = 0; i < text.length(); i++) {
if(text.charAt(i) == ' ') {
removeWhiteSpaces(i + 1, text);
}
}
if(text.charAt(text.length() - 1) != '.') {
text.append('.');
}
text.append("\n");
return text.toString();
}

TA貢獻(xiàn)1788條經(jīng)驗 獲得超4個贊
嘗試這個:
while ((line = br.readLine()) != null) {
if(line.trim().isEmpty()) {
continue;
}
string += normalize(line);
}

TA貢獻(xiàn)1794條經(jīng)驗 獲得超8個贊
試試 ScanReader
Scanner scan = new Scanner(is);
int rowCount = 0;
while (scan.hasNextLine()) {
String temp = scan.nextLine();
if(temp.trim().length()==0){
continue;
}
}
//其余的邏輯
添加回答
舉報