如何使用这个正则表达式分割字符串?

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

我有一个包含分隔符"|##|"的URL。

我尝试着将其分割,但未找到解决方案。

3个回答

4
使用Pattern.quote,它会为您完成这项工作:

返回指定字符串的字面模式字符串。

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

现在"|##|"被视为字符串文字"|##|"而不是正则表达式"|##|"。问题在于您没有转义第二个管道符,它在正则表达式中具有特殊含义。
另一种解决方案(由@kocko建议),是手动转义特殊字符*
final String s[] = url.split("\\|##\\|");

* 转义特殊字符需要使用\,但在Java中\表示为\\


1
我喜欢这种方法(Pattern.quote - Konstantin Yovkov
2
那真是超级快!+1 - Rahul Tripathi

2

你需要转义第二个 |,因为它是正则表达式的运算符:

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

1
你应该尝试理解这个概念 - String.split(String regex) 将参数解释为正则表达式,由于竖杠字符 "|" 在正则表达式中表示逻辑或,因此你会得到一个包含单词中每个字母的数组。
即使你使用了 url.split("|"); 也会得到相同的结果。

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

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

你可以在这里检查正则表达式结构 - http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接