【问题标题】:split string for returning only the latter part仅返回后半部分的拆分字符串
【发布时间】:2012-11-12 09:22:15
【问题描述】:

我有一个这样的字符串:

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

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

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

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

【问题讨论】:

  • 请包含您的代码,否则您的问题偏离主题(如faq 所述)。
  • 我建议使用正则表达式而不是 split。同意 Rohit Jain 的回答。
  • @user1703096,您通常不接受答案。太糟糕了!

标签: java string


【解决方案1】:

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

你可以使用这个正则表达式:-

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

这包含一个用于:look-behind 和一个用于;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 (;)`
)

这是工作代码:-

   String str = "abc:def,ghi,jkl;mno:pqr,stu;vwx:yza,aaa,bbb;";

   Matcher matcher = Pattern.compile("(?<=:)(.*?)(?=;)").matcher(str);

   StringBuilder builder = new StringBuilder();
   while (matcher.find()) {
       builder.append(matcher.group(1)).append(", ");
   }

   System.out.println(builder.substring(0, builder.lastIndexOf(",")));

输出:-

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

【讨论】:

  • 是否有生成该 RegexExplanation 部分的工具,或者您是否手动输入?一个工具对初学者非常有用。
  • @CoryKendall.. 我只用手打字。但是网上有很多Regex资源。我觉得你可以google一下。你会得到很多。 :)
【解决方案2】:
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 

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2021-07-12
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      相关资源
      最近更新 更多