5 回答

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

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

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
也許我錯(cuò)過了一些東西,但我不明白分裂有什么好處。我會這樣做:
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);
}
}
具體來說,我認(rèn)為根本不需要修改輸入,通過調(diào)用split,制作額外的副本,執(zhí)行查找/替換等。這一切都需要額外的時(shí)間和空間。
實(shí)際上,我看不出有任何理由打擾按行處理文件:
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);
}
}
使用緩沖讀取器本身可以讓您有效地不逐個(gè)字符讀取文件。因此,通過這種方式可以保存每行的額外副本。

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個(gè)贊
字符類具有“是白色空間()”方法
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貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個(gè)贊
為什么不在執(zhí)行拆分和計(jì)數(shù)之前從字符串中刪除空格?
一種方法是使用正則表達(dá)式:
while (line != null)
{
line.replaceAll("\\s+","");
lineCharacters = line.split("");
...
}
添加回答
舉報(bào)