繁体   English   中英

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

[英]How can i split a String by last char with a regex?

我可以这样:

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

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

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

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

前瞻性检查是否持续.

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

在每个. 看起来(如果只有字符)不是 . 直到$ end。 如果是这样,则匹配.

在regex101.com上测试 正则表达式常见问题解答

此选项适用于您可能想到的所有拆分条件。

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM