Java-如何拆分字符串,但还要保留定界符?

我有一个多行字符串,该字符串由一组不同的定界符定界:

(Text1)(DelimiterA)(Text2)(DelimiterC)(Text3)(DelimiterB)(Text4)

我可以使用将该字符串拆分为多个部分,String.split但似乎无法获取与定界符regex匹配的实际字符串。

换句话说,这就是我得到的:

Text1

Text2

Text3

Text4

这就是我要的

Text1

DelimiterA

Text2

DelimiterC

Text3

DelimiterB

Text4

是否有任何JDK使用分隔符regex拆分字符串但又保留分隔符的方法?

回答:

你可以使用LookaheadLookbehind。像这样:

System.out.println(Arrays.toString("a;b;c;d".split("(?<=;)")));

System.out.println(Arrays.toString("a;b;c;d".split("(?=;)")));

System.out.println(Arrays.toString("a;b;c;d".split("((?<=;)|(?=;))")));

你将获得:

[a;, b;, c;, d]

[a, ;b, ;c, ;d]

[a, ;, b, ;, c, ;, d]

最后一个是你想要的。

((?<=;)|(?=;))等于选择之前;或之后的空字符;。

希望这可以帮助。

编辑 Fabian Steeg对可读性的评论有效。可读性始终是RegEx的问题。一件事,我要做的是缓解这种情况,即创建一个变量,该变量的名称代表正则表达式的作用,并使用Java String格式来帮助实现这一点。像这样:

static public final String WITH_DELIMITER = "((?<=%1$s)|(?=%1$s))";

...

public void someMethod() {

...

final String[] aEach = "a;b;c;d".split(String.format(WITH_DELIMITER, ";"));

...

}

...

以上是 Java-如何拆分字符串,但还要保留定界符? 的全部内容, 来源链接: utcz.com/qa/418010.html

回到顶部