1

我一直在尝试找到一种方法来从由常量字符串分隔符分隔的文件中读取一些数据。

分隔符包括元字符,我试图只在它出现的地方分割,所以正则表达式不合适。

有人可以为我建议一个方法吗,我知道如何实现我自己的方法来做到这一点,我要问的是java是否有内置的东西来做到这一点。

例子:

John %#@!~23s,243 doe %#@!~23s,243 去 %#@!~23s,243 去市场买了一些牛奶。

会导致。

呼叫 1:.next()--> 约翰呼叫 2:.next()--> doe 呼叫 3:.next()--> 去呼叫 4:.next()--> 去市场买一些牛奶。

4

2 回答 2

1

分隔符包括元字符,我试图只在它出现的地方分割,所以正则表达式不合适。

您仍然可以使用正则表达式作为分隔符 - 只需使用Pattern.quote以确保正则表达式中的“特殊”字符不会干扰。

当然,这是假设您仍想使用Scanner. 您可以在GuavaSplitter中使用该类

于 2013-03-05T18:22:43.377 回答
0

嗯,我不确定你在哪里遇到问题。这应该有效:

代码:

    String input = "John %#@!~23s,243 doe %#@!~23s,243 went %#@!~23s,243 to market to buy some milk.";
    Scanner scanner = new Scanner(input).useDelimiter("\\s+" + Pattern.quote("%#@!~23s,243") + "\\s+");
    while (scanner.hasNext()) {
        System.out.println("Token: ." + scanner.next() + ".");
    }

输出:

Token: .John.
Token: .doe.
Token: .went.
Token: .to market to buy some milk..

Pattern.quote()对于该示例字符串(不包含元字符),这并不是绝对必要的,但根据实际输入可能需要。

于 2013-03-05T18:34:29.213 回答