给出以下输入
s = "//[***]\n1***2***3"
我需要在" \ n"之后分割部分。围绕方括号内的字符序列,遵循以下语法:
"//[delimiter]\n"
首先,我需要检查输入中的字符串是否与语法匹配,我是这样写的:
if(s.matches("[//[.+].+]")){
String delimiter = s.substring(3, s.indexOf(']'));
String s1 = s.substring(s.indexOf(']')+3); //the part after \n which I need to split
String[] nums = s1.split("[delimiter]");
}
但它给了我以下错误:
java.util.regex.PatternSyntaxException: Unclosed character class near index 4
[,
[]
你能用正确的正则表达式语法帮助我吗?
答案 0 :(得分:0)
首先,"[delimiter]"
是纯文字字符串。它不会评估变量delimiter
的值。所以这没有多大意义。
其次,String.split()需要regexp作为参数,但是你想传递一个文字分隔符。所以你需要引用你的分隔符:
String[] nums = s1.split(Pattern.quote(delimiter));
另外,
s.substring(s.indexOf(']') + 3);
应该是
s.substring(s.indexOf(']') + 2);
\n
是一个字符,而不是两个。
答案 1 :(得分:0)
你需要逃离方括号。此外,提取分隔符的更健壮的方法是使用组:
(.+?)
组是在parantheses中定义的(因此在这种情况下,组是group(i)
)并且您可以有多个组,然后使用{{1}}来获取第i组的值。