删除文本文件中的空格
Removing whitespaces in text file
我必须编写一个简单的代码来计算文本文件中的单词数。然后有人告诉我,它是不完整的,因为例如,当一行中有 2 个或更多空格时,函数会将它们计为一个单词,结果将不正确。所以我试图通过制作一个列表并删除那里的所有“”元素来修复它,但它似乎不起作用。你能建议可以做什么吗?
这是现在的代码:
int count = 0;
File file = new File("C:\Users\user\Desktop\Test.txt");
FileInputStream fis = new FileInputStream(file);
byte[] bytesArray = new byte[(int) file.length()];
fis.read(bytesArray);
String s = new String(bytesArray);
String[] data = s.split(" ");
List<String> list = new ArrayList<>(Arrays.asList(data));
list.remove(" ");
data = list.toArray(new String[0]);
for (int i = 0; i < data.length; i++) {
count++;
}
System.out.println("Number of words in the file are " + count);
试试这行代码:
String data1 = s.trim().replaceAll(" +", " ");
行前:
String[] data = data1.split(" ");
这应该会删除 String 中出现的任何 2 个或更多个连续空格。无需使用 list.remove(" ")
你可以通过正则表达式实现这个
字符串[] 数据= s.split("\s+");
int count = 0;
File file = new File("/home/vahid/Documents/test.txt");
FileInputStream fis = new FileInputStream(file);
byte[] bytesArray = new byte[(int) file.length()];
fis.read(bytesArray);
String s = new String(bytesArray);
String[] data = s.split("\s+");
List<String> list = new ArrayList<>(Arrays.asList(data));
list.remove(" ");
data = list.toArray(new String[0]);
for (int i = 0; i < data.length; i++) {
count++;
}
System.out.println("Number of words in the file are " + count);
处理此类需求的最佳方式:
首先我们应该知道文本文件中使用的字符编码。
基于此,我们应该尝试逐字节读取文件,同时进行处理
例如:如果当您读取第一个字节时文件是 utf-8,我们可以确定应该读取多少字节才能得到第一个 character.like,当我们找到一个“.”时。或 " " 或 line break ,那么我们可以将其识别为单词分隔符。
这种方式很有效(特别是对于大文件)并且文件编码很重要。
如果我们用 byte[] 调用 String 构造函数,它总是使用默认编码并且它还会逐字节迭代数组。
做个书呆子。你可以在一行中完成,使用 java.nio.file
包中的 类 :)
int count = new String(Files.readAllBytes(Paths.get("/tmp/test.txt")), "UTF-8")
.trim().split("\s+").length;
计算文件中有多少个单词。或者
String result = new String(Files.readAllBytes(Paths.get("/tmp/test.txt")), "UTF-8")
.trim().replaceAll("\s+", " ");
正确替换内容的单个字符串。
我必须编写一个简单的代码来计算文本文件中的单词数。然后有人告诉我,它是不完整的,因为例如,当一行中有 2 个或更多空格时,函数会将它们计为一个单词,结果将不正确。所以我试图通过制作一个列表并删除那里的所有“”元素来修复它,但它似乎不起作用。你能建议可以做什么吗?
这是现在的代码:
int count = 0;
File file = new File("C:\Users\user\Desktop\Test.txt");
FileInputStream fis = new FileInputStream(file);
byte[] bytesArray = new byte[(int) file.length()];
fis.read(bytesArray);
String s = new String(bytesArray);
String[] data = s.split(" ");
List<String> list = new ArrayList<>(Arrays.asList(data));
list.remove(" ");
data = list.toArray(new String[0]);
for (int i = 0; i < data.length; i++) {
count++;
}
System.out.println("Number of words in the file are " + count);
试试这行代码:
String data1 = s.trim().replaceAll(" +", " ");
行前:
String[] data = data1.split(" ");
这应该会删除 String 中出现的任何 2 个或更多个连续空格。无需使用 list.remove(" ")
你可以通过正则表达式实现这个
字符串[] 数据= s.split("\s+");
int count = 0;
File file = new File("/home/vahid/Documents/test.txt");
FileInputStream fis = new FileInputStream(file);
byte[] bytesArray = new byte[(int) file.length()];
fis.read(bytesArray);
String s = new String(bytesArray);
String[] data = s.split("\s+");
List<String> list = new ArrayList<>(Arrays.asList(data));
list.remove(" ");
data = list.toArray(new String[0]);
for (int i = 0; i < data.length; i++) {
count++;
}
System.out.println("Number of words in the file are " + count);
处理此类需求的最佳方式: 首先我们应该知道文本文件中使用的字符编码。 基于此,我们应该尝试逐字节读取文件,同时进行处理 例如:如果当您读取第一个字节时文件是 utf-8,我们可以确定应该读取多少字节才能得到第一个 character.like,当我们找到一个“.”时。或 " " 或 line break ,那么我们可以将其识别为单词分隔符。
这种方式很有效(特别是对于大文件)并且文件编码很重要。
如果我们用 byte[] 调用 String 构造函数,它总是使用默认编码并且它还会逐字节迭代数组。
做个书呆子。你可以在一行中完成,使用 java.nio.file
包中的 类 :)
int count = new String(Files.readAllBytes(Paths.get("/tmp/test.txt")), "UTF-8")
.trim().split("\s+").length;
计算文件中有多少个单词。或者
String result = new String(Files.readAllBytes(Paths.get("/tmp/test.txt")), "UTF-8")
.trim().replaceAll("\s+", " ");
正确替换内容的单个字符串。