Java split()没有按预期工作

时间:2014-09-30 18:10:57

标签: java

我目前有文字,其中我有“TweetJSONObject \ r \ n \ n / 19/14 / 14TweetJSONObject”,其中TweetJSONObject只是一个json格式的推文。现在我正在使用.split()函数尝试将推文彼此分开,但似乎\ r \ n / 19/19/14不是一个合适的分裂字符串?这是代码:

String[] value = line.split("\r\n09/19/14");

PrintWriter writer = new PrintWriter("hello.txt", "UTF-8");
writer.println(value[0]);
writer.close();

文本文件'hello',当我打开它时,再次只是以下字符串,“TweetJSONObject \ r \ n \ n / 19/14 / 14TweetJSONObject”。关于我哪里出错的任何想法?

3 个答案:

答案 0 :(得分:3)

你需要逃避反斜杠:

String[] value = line.split("\\\\r\\\\n09/19/14");

为什么这么多反斜杠?

在文字Java字符串中,反斜杠是一个转义字符。文字字符串"\\"是单个反斜杠。在正则表达式中,反斜杠也是转义字符。正则表达式\\匹配单个反斜杠。因此,这个正则表达式作为Java字符串变为"\\\\"

答案 1 :(得分:1)

我建议使用库方法Pattern.quote,而不是试图自己逃避(这太容易混淆和容易出错)。一个小的可运行的例子:

package net.sanjayts;

import java.util.regex.Pattern;

public class RegexTest {
    public static void main(String[] args) {
        String s = "TweetJSONObject\r\n09/19/14TweetJSONObject";
        String[] parts = s.split(Pattern.quote("\r\n09/19/14"));
        System.out.println(parts[0] + " --- " + parts[1]);
    }
}

//Output: TweetJSONObject --- TweetJSONObject

答案 2 :(得分:0)

你需要逃避斜杠

String[] value = line.split("\\\\r\\\\n09/19/14");

PrintWriter writer = new PrintWriter("hello.txt", "UTF-8");
writer.println(value[0]);
writer.close();