useDelimiter()

时间:2018-04-22 18:34:13

标签: java read-text

这是我到目前为止阅读文本文件的工作,

   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行新行。

1 个答案:

答案 0 :(得分:3)

那是因为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