【问题标题】:How can i split a String by last char with a regex?如何使用正则表达式按最后一个字符拆分字符串?
【发布时间】:2015-04-17 10:58:26
【问题描述】:

我可以这样做:

String s = "dsad.dd.ada....png";
int i = s.lastIndexOf('.');
String[] arr = {s.substring(0, i), s.substring(i + 1)};
System.out.println(Arrays.toString(arr));

输出:

[dsad.dd.ada..., png]

但我想了解如何使用正则表达式。

String s = "dsad.dd.ada....png";
String[] arr = s.split("REGEX");
System.out.println(Arrays.toString(arr));

【问题讨论】:

    标签: java arrays regex string split


    【解决方案1】:

    您可以使用lookahead 断言。 (?= ... ) 是一个零宽度断言,它不会“消耗”字符串上的任何字符,而只是断言是否可能匹配。

    下面的正则表达式首先匹配一个文字点,然后使用前瞻来断言后面是除点“零次或多次”之外的任何字符,然后是字符串的结尾。

    String s = "dsad.dd.ada....png";
    String[] arr = s.split("\\.(?=[^.]*$)");
    System.out.println(Arrays.toString(arr)); //=> [dsad.dd.ada..., png]
    

    【讨论】:

      【解决方案2】:

      使用lookahead 检查最后一个.

      "\\.(?=[^.]*$)"
      

      在每个. 看起来,如果前面只有characters, that are not . 直到$ 结束。如果是,则匹配.

      Test at regex101.com; Regex FAQ

      【讨论】:

        【解决方案3】:

        这适用于您可能提出的所有拆分标准。

        public static void main(final String[] args) {
            String test = "dsad.dd.ada....png";
            String breakOn = "\\.";
            String pattern = breakOn + "(?!.*" + breakOn + ".*)";
            System.out.println(Arrays.toString(test.split(pattern, 2)));
        }
        

        输出: [dsad.dd.ada..., png]

        【讨论】:

          猜你喜欢
          • 2010-12-04
          • 2018-11-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-15
          • 2011-12-28
          相关资源
          最近更新 更多