来自BufferedReader的Scanner.next()

时间:2011-06-13 06:01:26

标签: java

我正在尝试使用"()()"方法根据分隔符Scanner.next()扫描阅读器中的文本。这是我的代码:

public static void main(String[] args)
{
    String buffer = "i want this text()()without this text()()";

    InputStream in = new ByteArrayInputStream(buffer.getBytes());
    InputStreamReader isr = new InputStreamReader(in);
    BufferedReader reader = new BufferedReader(isr);

    Scanner scan = new Scanner(reader);
    scan.useDelimiter("/(/)/(/)");
    String found = scan.next();
    System.out.println(found);
}

问题是,返回整个缓冲区:

i want this text()()without this text()()

我只希望第一个next()迭代返回:

i want this text

和下一个next()迭代返回:

without this text

我是如何通过仅分隔以()()结尾的字符串来扫描阅读器的任何建议?

1 个答案:

答案 0 :(得分:4)

您的useDelimiter参数不正确 - 当您尝试转义括号时,您正在使用正斜杠而不是反斜杠。您还需要以Java术语来转义反斜杠:

scan.useDelimiter("\\(\\)\\(\\)");

编辑:您可以使用Pattern.quote

,而不是自己逃避
String rawDelimiter = "()()";
String escaped = Pattern.quote(rawDelimiter);
scan.useDelimiter(escaped);