【问题标题】:Split string in latest occurrence of substring在最近出现的子字符串中拆分字符串
【发布时间】:2016-10-24 11:22:49
【问题描述】:

当找到子字符串时,我需要帮助来拆分字符串,仅在最近出现时

 Substring to search(example):123 
 String: 123hello123boy123guy123girl 
 Res: 123hello123boy123guy (result on split[0])

 Ex: hello123boy
 Res:hello 

我正在尝试使用此功能,但此拆分仅在第一次出现。

public static String[] getSplitArray(String toSplitString, String spltiChar) {
    return toSplitString.split("(?<=" + spltiChar + ")");
    }

【问题讨论】:

  • 子字符串总是在里面,但它可能会出现 1-n 次
  • 如果以子串 123 结尾怎么办?

标签: java string substring


【解决方案1】:

如果您想在单个 split() 中执行此操作,则应该可以:

string.split("123((?!123).)*?$")

例如:

String s = "foo123bar123hhh123tillHere123Bang";
System.out.println(s.split("123((?!123).)*?$")[0]);

输出:

foo123bar123hhh123tillHere

另一种方法是,只需 split("123") 然后 join123 所需的元素作为分隔符。

【讨论】:

    【解决方案2】:

    改进Kent 的回答:这实际上会给您一个拆分数组,而不是带有String 第一部分的单元素数组:

    String[] text = {
            "123hello123boy123guy123girl", // 123hello123boy123guy 
            "hello123boy"// hello
    };
    for (String s: text) {
        System.out.println(
            Arrays.toString(
                s.split("123(?=((?!123).)*?$)")
            )
        );
    }
    

    输出

    [123hello123boy123guy, girl]
    [hello, boy]
    

    【讨论】:

      【解决方案3】:

      你不需要正则表达式,你可以简单地使用String#lastIndexOf

      -> String s = "123hello123boy123guy123girl"
      
      -> s.substring(0, s.lastIndexOf("123"));
      |  Expression value is: "123hello123boy123guy"
      
      -> s.substring(s.lastIndexOf("123"));
      |  Expression value is: "123girl"
      

      【讨论】:

      • 我认为如果java版本
      猜你喜欢
      • 1970-01-01
      • 2019-10-11
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 2016-04-28
      相关资源
      最近更新 更多