由于String.split()
适用于正则表达式,因此该代码段为
String s = "str?str?argh";
s.split("r?");
...产量:[, s, t, , ?, s, t, , ?, a, , g, h]
在r?
序列上拆分此字符串以使其生成[st, st, argh]
的最优雅方法是什么?
编辑:我知道我可以逃脱有问题的?
。问题是我不知道分隔符,我不想通过编写escapeGenericRegex()
函数来解决这个问题。
答案 0 :(得分:71)
仅使用Java SE API的一般解决方案是:
String separator = ...
s.split(Pattern.quote(separator));
quote
方法返回一个将参数字符串作为文字匹配的正则表达式。
答案 1 :(得分:9)
答案 2 :(得分:5)
逃离?
:
s.split("r\\?");
答案 3 :(得分:4)
这也很完美:
public static List<String> splitNonRegex(String input, String delim)
{
List<String> l = new ArrayList<String>();
int offset = 0;
while (true)
{
int index = input.indexOf(delim, offset);
if (index == -1)
{
l.add(input.substring(offset));
return l;
} else
{
l.add(input.substring(offset, index));
offset = (index + delim.length());
}
}
}
答案 4 :(得分:4)
String[] strs = str.split(Pattern.quote("r?"));
答案 5 :(得分:2)
通常通过识别分隔符序列的外观,从输入字符串中提取非重叠的子字符串。可以将此分隔符指定为单个字符,固定字符串,正则表达式或CharMatcher实例。或者,不是使用分隔符,分割器可以提取给定固定长度的相邻子串。
答案 6 :(得分:1)
可以直接使用Pattern类,将表达式定义为LITERAL,在这种情况下,将按原样对表达式进行求值(不是正则表达式)。
Pattern.compile(<literalExpression>, Pattern.LITERAL).split(<stringToBeSplitted>);
示例:
String[] splittedResult = Pattern.compile("r?", Pattern.LITERAL).split("str?str?argh");
将得到:
[st, st, argh]
答案 7 :(得分:-3)
试
String s = "str?str?argh";
s.split("r\?");