如何使用正则表达式将最后一个字符串拆分为字符串?

时间:2015-02-16 20:29:31

标签: java arrays regex string split

我可以这样做:

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));

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

使用lookahead检查上一个.

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

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

Test at regex101.com; Regex FAQ

答案 2 :(得分:1)

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

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)));
}

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