如何用这个正则表达式拆分String?

时间:2015-06-02 06:52:17

标签: java regex

if (url.contains("|##|")) {
    Log.e("url data", "" + url);
    final String s[] = url.split("\\|##|");
}

我有一个带有分隔符"|##|"

的网址

我试图将其分开,但没有找到解决方案。

3 个答案:

答案 0 :(得分:4)

使用Pattern.quote,它将为您完成工作:

  

返回指定String的文字模式String

final String s[] = url.split(Pattern.quote("|##|"));

现在“| ## |”被视为字符串文字“| ## |”而不是正则表达式“| ## |”。问题是你没有逃脱第二个管道,它在正则表达式中具有特殊含义。

另一种解决方案(由@kocko建议)正在手动转义 * 特殊字符:

final String s[] = url.split("\\|##\\|");

*转义特殊字符由\完成,但在Java \中表示为\\

答案 1 :(得分:2)

你必须逃避第二个|,因为它是一个正则表达式运算符:

final String s[] = url.split("\\|##\\|");

答案 2 :(得分:1)

您也应该尝试理解这个概念 - String.split(String regex)将参数解释为正则表达式,并且因为管道字符" |"在正则表达式中是一个逻辑OR,你会得到结果,因为每个字母的数组都是你的单词 即使您使用过url.split("|");,也会得到相同的结果。

为什么String.contains(CharSequence s)在开始时传递了|##|,因为它将参数解释为CharSequence而不是正则表达式。

底线:检查API,了解特定方法如何解释传递的输入。就像我们看到的那样,在split()的情况下,它将解释为正则表达式,而在contains()的情况下,它将解释为字符序列。

您可以在此处检查正则表达式构造 - http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html