当前位置: 首页 > 面试题库 >

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

经佐
2023-03-14
问题内容

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

(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 1.5): 我需要一个数组: 用Java最方便的方法是什么? 问题答案: 这将为您提供所需的数组,只有第一项为空。和: 这将使数组没有空的第一项。 此处的关键是零宽度正向超前(非捕获构造)(请参阅regex pattern docs)。 表示“或者;或:” 是字边界的-在那里是为了不将第一个视为定界符(因为它是序列的开头)

  • 问题内容: 我需要正则表达式的帮助来解决以下问题: 我有一个字符串,例如“ 1£23 $ 456 $£$” 当我拆分它时,我希望字符串数组中的输出包含: 有人对如何最好地解决这个问题有任何想法吗?该解决方案需要满足以下附加要求: 也各执分隔符:,,,和 非定界符字符只是在定界符前带有可选空格的数字。 任何此类空格都是值的一部分,而不是分隔符本身。 问题答案: 使用更强大的功能代替。下面的代码应该可

  • 问题内容: 我想用多个定界符分割一个字符串,但将定界符保留在结果列表中。我认为这是解析任何一种公式的初始步骤都是有用的,而且我怀疑有一个不错的Python解决方案。 有人在这里用Java问了类似的问题。 例如,典型的拆分如下所示: 但是我正在寻找一种添加加号(或保留它)的好方法: 最终,我想对每个运算符和括号进行此操作,因此,如果有一种方法 一劳永逸,那就更好了。 问题答案: 您可以使用Pytho

  • 问题内容: 我正在Java中的一个需要嵌套字符串的项目中工作。 对于纯文本形式的输入字符串,如下所示: 这是“字符串”,这是“ \嵌套”字符串 结果必须为以下内容: 请注意 ,我希望保留序列。 我有以下方法: 而且我需要根据给定的规则从给定的参数中创建一个字符串数组,而不使用 Java Collection Framework 或其派生类。 我不确定如何解决这个问题。 可以做一个正则表达式来解决这

  • 我有一个字符串,,我想把它分成两个字符串: 这意味着第一个字符串将包含之前的字符,第二个字符串将包含之后的字符。我还想检查字符串中是否有。如果没有,我会抛出一个异常。我该如何做到这一点?