java中的多个字符分隔符

时间:2018-04-08 17:17:51

标签: java

给出以下输入

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
[,
[]

你能用正确的正则表达式语法帮助我吗?

2 个答案:

答案 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组的值。