5 回答
TA贡献1895条经验 获得超7个赞
我认为你的 . 有问题removeWhiteSpaces(i + 1, text);,如果你在字符串过程中有问题,读者将无法阅读下一行。
你不检查空字符串,你打电话text.charAt(text.length()-1),这也是一个问题。
打印异常,更改您的 catch 块以写出异常:
} catch (Exception e) {
e.printStackTrace();
}
原因是在你的while(text.charAt(j) == ' ') {,你不检查StringBuilder的长度,但你删除它......
TA贡献1802条经验 获得超4个赞
问题不在于您的代码,而在于对readLine()方法的理解。在文档中指出:
读取一行文本。一行被认为是由换行符 ('\n')、回车符 ('\r') 或紧跟换行符的回车符中的任何一个终止的。
https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()
这意味着如果该方法找到一个空行,它将停止读取并返回null。
@tijn167 提出的代码将使用BufferedReader. 如果您不克制BufferedReader使用ScanReader@Abhishek Soni 的建议。
此外,您的方法removeWhiteSpaces()是检查空格,而空行不是空格,而是进位返回\r或换行\n或两者兼而有之。所以你的条件text.charAt(j) == ' '永远不会满足。
TA贡献1803条经验 获得超6个赞
归一化功能导致了这种情况。对其进行以下调整应该可以解决此问题:
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贡献1788条经验 获得超4个赞
尝试这个:
while ((line = br.readLine()) != null) {
if(line.trim().isEmpty()) {
continue;
}
string += normalize(line);
}
TA贡献1794条经验 获得超8个赞
试试 ScanReader
Scanner scan = new Scanner(is);
int rowCount = 0;
while (scan.hasNextLine()) {
String temp = scan.nextLine();
if(temp.trim().length()==0){
continue;
}
}
//其余的逻辑
添加回答
举报
