5 回答

TA貢獻1810條經驗 獲得超4個贊
或者(Java 8 +),你可以用 和 方法非常輕松地做到這一點:lines()chars()
BufferedReader br = new BufferedReader(fr);
long count = br.lines().flatMapToInt(e -> e.codePoints()).filter(e -> !Character.isWhiteSpace(e)).count();
這將占用文件的行,將它們平面映射到字符,過濾掉任何空格,然后計算元素Stream<String>String::codePoints

TA貢獻1820條經驗 獲得超10個贊
為什么不在從所有空格中清除每行后添加每行的字符數:
while (line != null) {
count += line.replaceAll("\\s+", "").length();
line = br.readLine();
}

TA貢獻1852條經驗 獲得超1個贊
也許我錯過了一些東西,但我不明白分裂有什么好處。我會這樣做:
public static void main(String[] args) {
try {
FileReader fr = new FileReader("/tmp/test.txt");
BufferedReader br = new BufferedReader(fr);
int count = 0;
String line;
line = br.readLine();
while (line != null) {
for (int i = 0; i < line.length(); i++)
if (!Character.isWhitespace(line.charAt(i)))
count++;
line = br.readLine();
}
br.close();
System.out.println(count);
} catch (IOException ex) {
System.out.println(ex);
}
}
具體來說,我認為根本不需要修改輸入,通過調用split,制作額外的副本,執行查找/替換等。這一切都需要額外的時間和空間。
實際上,我看不出有任何理由打擾按行處理文件:
public static void main(String[] args) {
try {
FileReader fr = new FileReader("/tmp/test.txt");
BufferedReader br = new BufferedReader(fr);
int count = 0;
while (true) {
int c = br.read();
if (c < 0)
break;
if (!Character.isWhitespace(c))
count++;
}
br.close();
System.out.println(count);
} catch (IOException ex) {
System.out.println(ex);
}
}
使用緩沖讀取器本身可以讓您有效地不逐個字符讀取文件。因此,通過這種方式可以保存每行的額外副本。

TA貢獻1793條經驗 獲得超6個贊
字符類具有“是白色空間()”方法
java.lang.Character.isWhitespace(字符 ch)
while (line != null)
{
for (int i = 0; i < line.length(); i++)
{
if (!Character.isWhitespace(line.charAt(i)))
count ++;
line = br.readLine();
}
System.out.println(count);
}

TA貢獻1757條經驗 獲得超8個贊
為什么不在執行拆分和計數之前從字符串中刪除空格?
一種方法是使用正則表達式:
while (line != null)
{
line.replaceAll("\\s+","");
lineCharacters = line.split("");
...
}
添加回答
舉報