Java如何逐行读取文本文件并分别获取该行的文本(长度文本)
我有这样的文本文件 12A aa65 3244 5 665 fr 65 3434344344343 888dds 77786334 6h 1114 22 6FF 7 d M6 h o8 665466676 8Pt 543NNv 9 该文件位于不同宽度的列中,例如,第一列宽6个字符,第二列宽5个字符,第三列宽5个字符,依此类推 我想将每一行拆分为列中的值,如第一行所示: 12A , aa65 , 3244 , 5 , , 665 , fr , 65 , 3434344344343 , 888dds , 77786334 , 6h 最新答复: 啊,好的,你想把文本按列的宽度分开。看起来您的列长度是: 6 5 5 6 8 6 4 18 9 (the rest)Java如何逐行读取文本文件并分别获取该行的文本(长度文本),java,Java,我有这样的文本文件 12A aa65 3244 5 665 fr 65 3434344344343 888dds 77786334 6h 1114 22 6FF 7 d M6 h o8 665466676 8Pt 543NNv 9 该文件位于不同宽度的列中,例如,第一列宽6个字符,第二列宽5个字符,第三列宽5个字符,依此类推 我想将每一行拆分为列中的值,如第一行所示:
您也可以考虑使用一个类而不是一个数组来处理部分,并将解析逻辑放在类中。
原始答复: 听起来您正在寻找和的组合: readLine从输入中读取行split使用正则表达式定义的分隔符将字符串拆分为字符串数组。在您的情况下,分隔符似乎只是一个或多个空格。您可以使用readline,然后按空格拆分。您希望像这样拆分字符串 我假设您已经阅读了该文件,只想将其拆分
如果需要,请对行使用Str.split\n,对空格使用Str.split。 这将从源读取输入,直到遇到换行符为止 对于文件读取,我通常使用BufferedReader作为文件读取器的包装器,因为这对于批量读取更有效。FileReader为每次对read方法的调用读取文件 编辑以添加: 如果您希望对结果进行排序,那么将数据完全读入内存,然后再进行排序将更加高效,因为随机磁盘访问非常慢
使用自定义比较器将行读入列表或优先级队列将实现您的目标。使用扫描仪读取文件,并使用subStringstart、end方法解析每个字段
Scanner sc = new Scanner(new File("myFile"));
while (sc.hasNextLine()) {
String aLine = sc.nextLine();
String field1 = aLine.subString(0,6);
String field2 = aLine.subString(6,11);
...
}
很不清楚你在问什么。你如何划分界线的标准是什么?目前你的问题很模糊,无法回答。你说的6码和5码是什么意思。你能再描述一下标准吗?是的。这是读线。但我想按长度获取该行的文本因为split需要一个正则表达式,他有可变的空格,他不能用+?@LakmalUdayanga:长度是什么意思?@Kon:谢谢,出于某种原因,我想split会合并空段,但是当然不会。@LakmalUdayanga:除非你告诉我们你所说的长度是什么意思,否则帮不了你。同样,说我不能使用X也是毫无意义的。你必须说为什么。是的,你是对的。我找到了我的食物:D谢谢:D
BufferedReader r = /*...get a BufferedReader for your input...*/;
String line;
String[] parts;
while ((line = r.readLine()) != null) {
parts = line.split(" +");
// Use the `parts` array
}
Scanner sc = new Scanner(new File("myFile"));
while (sc.hasNextLine()) {
String aLine = sc.nextLine();
String field1 = aLine.subString(0,6);
String field2 = aLine.subString(6,11);
...
}