我必须计算文件"test.txt"中有多少个字母(字符(。我把它记下来了,但它也包括空间,我不想包括。关于如何做到这一点的任何建议?非常感谢。
import java.io.*;
class EnglishAnalysis
{
public static void main(String[] args)
{
try
{
FileReader fr = new FileReader("test.txt");
BufferedReader br = new BufferedReader(fr);
int count = 0;
String lineCharacters [];
String line;
line = br.readLine();
while (line != null)
{
lineCharacters = line.split("");
for (int i = 0; i < lineCharacters.length; i++)
{
count ++;
line = br.readLine();
}
System.out.println(count);
}
br.close();
}
catch (IOException e) {}
}
}
或者 (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
字符的字符,过滤掉任何空格,然后计算元素
也许我错过了一些东西,但我不明白拆分有什么好处。 我会这样做:
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);
}
}
具体来说,我认为根本不需要修改输入,通过调用拆分、制作额外的副本、进行查找/替换等。 这一切都需要额外的时间和空间。
实际上,我认为没有任何理由费心处理行中的文件:
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);
}
}
使用 BufferedReader 本身可以提高不逐个字符读取文件的效率。 因此,您可以通过这样做来保存每行的额外副本。
为什么不从所有空格中清除每行后为每行添加字符数:
while (line != null) {
count += line.replaceAll("\s+", "").length();
line = br.readLine();
}
字符类有一个"isWhiteSpace(("方法
java.lang.Character.isWhitespace(char 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);
}
为什么不在进行拆分和计数之前从字符串中删除空格?
一种方法是使用正则表达式:
while (line != null)
{
line.replaceAll("\s+","");
lineCharacters = line.split("");
...
}