if (url.contains("|##|")) {
Log.e("url data", "" + url);
final String s[] = url.split("\\|##|");
}
我有一个带有分隔符"|##|"
我试图将其分开,但没有找到解决方案。
答案 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