拆分字符串仅返回后一部分

时间:2012-11-12 09:22:15

标签: java string

我有一个这样的字符串:

abc:def,ghi,jkl;mno:pqr,stu;vwx:yza,aaa,bbb;

我想先拆分;然后: 最后输出应该只是后一部分:即我的输出应该是

def, ghi, jkl, pqr, stu, yza,aaa,bbb

这可以使用Split两次完成,即使用;一次,然后使用:,然后使用模式匹配找到:旁边的右侧部分。但是,有没有更好的优化解决方案来实现这一目标?

3 个答案:

答案 0 :(得分:6)

所以基本上你想要在;:之间获取内容,左边是:,右边是;

您可以使用此正则表达式: -

"(?<=:)(.*?)(?=;)"

这包含look-behind的{​​{1}}和:的{​​{1}}。并匹配前缀为look-ahead的字符串,后跟;

正则表达式说明: -

colon(:)

这是工作代码: -

semi-colon (;)

输出: -

(?<=         // Look behind assertion.
    :        // Check for preceding colon (:)
)            
(            // Capture group 1
    .        // Any character except newline
    *        // repeated 0 or more times
    ?        // Reluctant matching. (Match shortest possible string)
)
(?=          // Look ahead assertion
    ;        // Check for string followed by `semi-colon (;)`
)

答案 1 :(得分:3)

String[] tabS="abc:def,ghi,jkl;mno:pqr,stu;vwx:yza,aaa,bbb;".split(";");
StringBuilder sb = new StringBuilder();
Pattern patt = Pattern.compile("(.*:)(.*)");
String sep = ",";
for (String string : tabS) {
    sb.append(patt.matcher(string).replaceAll("$2 ")); // ' ' after $2 == ';' replaced
    sb.append(sep);
}
System.out.println(sb.substring(0,sb.lastIndexOf(sep)));

输出

def,ghi,jkl ,pqr,stu ,yza,aaa,bbb 

答案 2 :(得分:0)

除非你必须使用Java,否则不要模式匹配;如果您不能在字段名称中使用':'字符(在您的示例中为abc),则可以使用indexOf(":")找出“正确的部分”。