我可以这样做:
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));
答案 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)
答案 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]