5 回答
TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊
我認(rèn)為你的 . 有問題removeWhiteSpaces(i + 1, text);,如果你在字符串過程中有問題,讀者將無法閱讀下一行。
你不檢查空字符串,你打電話text.charAt(text.length()-1),這也是一個(gè)問題。
打印異常,更改您的 catch 塊以寫出異常:
} catch (Exception e) {
e.printStackTrace();
}
原因是在你的while(text.charAt(j) == ' ') {,你不檢查StringBuilder的長度,但你刪除它......
TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
問題不在于您的代碼,而在于對readLine()方法的理解。在文檔中指出:
讀取一行文本。一行被認(rèn)為是由換行符 ('\n')、回車符 ('\r') 或緊跟換行符的回車符中的任何一個(gè)終止的。
https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()
這意味著如果該方法找到一個(gè)空行,它將停止讀取并返回null。
@tijn167 提出的代碼將使用BufferedReader. 如果您不克制BufferedReader使用ScanReader@Abhishek Soni 的建議。
此外,您的方法removeWhiteSpaces()是檢查空格,而空行不是空格,而是進(jìn)位返回\r或換行\n或兩者兼而有之。所以你的條件text.charAt(j) == ' '永遠(yuǎn)不會滿足。
TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
歸一化功能導(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)驗(yàn) 獲得超4個(gè)贊
嘗試這個(gè):
while ((line = br.readLine()) != null) {
if(line.trim().isEmpty()) {
continue;
}
string += normalize(line);
}
TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
試試 ScanReader
Scanner scan = new Scanner(is);
int rowCount = 0;
while (scan.hasNextLine()) {
String temp = scan.nextLine();
if(temp.trim().length()==0){
continue;
}
}
//其余的邏輯
添加回答
舉報(bào)
