Java useDelimiter() 错误
Java error in useDelimiter()
这是我到目前为止一直在努力阅读文本文件,
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(),但它打印出空的 30 多行新行。
那是因为 useDelimiter
接受一个模式。点 .
是一个特殊字符,用于表示 'any character' 的正则表达式。只需用反斜杠转义句点即可:
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
这是我到目前为止一直在努力阅读文本文件,
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(),但它打印出空的 30 多行新行。
那是因为 useDelimiter
接受一个模式。点 .
是一个特殊字符,用于表示 'any character' 的正则表达式。只需用反斜杠转义句点即可:
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