This question already has answers here:
How do I use a delimiter in Java Scanner?
(3个答案)
去年关闭。
到目前为止,这是我一直在努力阅读的文本文件,
我的文本文件看起来像这样,
我想要这样的代码结果,
但是结果与文本文件本身相同。那不是“ useDelimiter(”。“)”应该用句点(“。”)分隔文本文件吗?
我也尝试过使用hasNext()和next()代替hasNextLine()和nextLine(),但是它会打印出空的30ish新行。
编辑
问题是,您使用的是
通过使用
输入:
输出:
(3个答案)
去年关闭。
到目前为止,这是我一直在努力阅读的文本文件,
Scanner file = new Scanner(new File("sample.txt")).useDelimiter(".");
ArrayList<String> arr = new ArrayList<>();
while (file.hasNextLine()) {
strList.add(file.nextLine());
}
file.close();
for (int i = 0; i < arr.size(); i++) {
System.out.println(arr.get(i));
}
我的文本文件看起来像这样,
I love you. You
love me. He loves
her. She loves him.
我想要这样的代码结果,
I love you
You love me
He loves her
She loves him
但是结果与文本文件本身相同。那不是“ useDelimiter(”。“)”应该用句点(“。”)分隔文本文件吗?
我也尝试过使用hasNext()和next()代替hasNextLine()和nextLine(),但是它会打印出空的30ish新行。
最佳答案
这是因为useDelimiter
接受模式。点.
是用于正则表达式的特殊字符,表示“任何字符”。只需以反斜杠转义即可,它将起作用:
Scanner file = new Scanner(new File("sample.txt")).useDelimiter("\\.");
编辑
问题是,您使用的是
hasNextLine()
和nextLine()
,它们不能与新的.
分隔符一起正常使用。这是一个工作示例,可为您提供所需的结果:import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test {
final static String path = Test.class.getResource("sample.txt").getPath();
public static void main(String[] args) throws IOException {
Scanner file = new Scanner(new File(path)).useDelimiter("\\.");
List<String> phrases = new ArrayList<String>();
while (file.hasNext()) {
phrases.add(file.next().trim().replace("\r\n", " ")); // remove new lines
}
file.close();
for (String phrase : phrases) {
System.out.println(phrase);
}
}
}
通过使用
hasNext()
和next()
,我们可以使用新的.
分隔符代替默认的新行分隔符。但是,由于我们这样做了,因此我们仍然将新行分散在您的段落中,这就是为什么我们需要删除新行,这是file.next().trim().replace("\r\n", " ")
的目的,以清理尾随空白并删除新的换行符。输入:
I love you. You
love me. He loves
her. She loves him.
输出:
I love you
You love me
He loves her
She loves him
10-01 22:56