Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用正则表达式按最后一个字符拆分字符串?_Java_Arrays_Regex_String_Split - Fatal编程技术网

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

Java 如何使用正则表达式按最后一个字符拆分字符串?,java,arrays,regex,string,split,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"; St

我可以这样做:

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));
使用检查最后一个

"\\.(?=[^.]*$)"
在每次
查看时,如果前面只有
直到
$
结束。如果是,则匹配

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

使用检查最后一个

"\\.(?=[^.]*$)"
在每次
查看时,如果前面只有
直到
$
结束。如果是,则匹配

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

您可以使用断言
(?=…)
是一个零宽度断言,它不“使用”字符串上的任何字符,只声明是否可能匹配

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

String s = "dsad.dd.ada....png";
String[] arr = s.split("\\.(?=[^.]*$)");
System.out.println(Arrays.toString(arr)); //=> [dsad.dd.ada..., png]
您可以使用断言
(?=…)
是一个零宽度断言,它不“使用”字符串上的任何字符,只声明是否可能匹配

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

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

这一条适用于您可能提出的所有分割条件

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]

此项适用于您可能提出的所有分割标准

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]