JAVA:反转字符串时删除定界符

问题描述 投票:1回答:2

通过下面的代码反转字符串时,如何包含定界符?

Pattern.compile(Pattern.quote("."))
       .splitAsStream("BCTVW.")
       .map(s->new StringBuilder(s).reverse())
       .collect(Collectors.joining("."))

当前输出:WVTCB.所需的输出:.WVTCB

所需的输出中缺少分隔符。

java string algorithm reverse
2个回答
0
投票
您可以使用非捕获组,例如前瞻。

Pattern.compile("(?<=\\.)") .splitAsStream("BCTVW.") .map(s->new StringBuilder(s).reverse()) .collect(Collectors.joining("."));


0
投票
[Pattern(regex).splitAsStream(data)]具有与data.split(regex)相似的功能,因此它也

删除了拆分产生的尾随空字符串。例如,"a,b,".split(",")不会产生["a","b",""],而会产生["a","b"],因为将删除数组末尾的空字符串。

Pattern#splitAsStreamString#split之间最关键的区别是String#split(regex)方法具有

重载

版本String#split(regex, limit),其中limit取决于值会影响其结果。 如果限制为

    positive它设置结果数组中元素的最大数量,例如"a,b,c,d".split(",", 3)将导致["a", "b", "c,d"]
  • [0它导致删除结尾的空字符串(split(regex,0)split(regex)相同
  • negative-
  • 防止split删除尾随的空字符串
-这就是您所追求的。因此,请勿使用Pattern#splitAsStream,而应像在String#split中尝试的那样使用previous question方法:

如果删除上一个问题的引号,则>]

String fileContent = "Abc.134dsq"; String delimiter = "."; fileContent = fileContent.replace(delimiter, "-"); String[] splitWords = fileContent.split("-"); StringBuilder stringBuilder = new StringBuilder(); for (String word : splitWords) { StringBuilder output = new StringBuilder(word).reverse(); stringBuilder.append(output); } System.out.println(stringBuilder.toString());
您需要在此处纠正的内容:

  1. 不要将字符串中的delimiter替换为-以在-上分割,因为您的字符串可能包含其自己的-。例如,将"A.B-C"替换为.后的-将变为A-B-C,这将导致不必要的拆分B-C

    代替使用Pattern.quote(delimiter)进行拆分-就像您在当前问题中提供的示例中所做的那样。

  2. 使用带有负数限制参数的split来防止删除尾随的空字符串(类似于fileContent.split(Pattern(delimiter), -1)
  3. 您没有将定界符添加回结果字符串。一种简单的解决方案是使用StringJoiner joiner = new StringJoiner(delimiter); joiner.add(reversedElement)而不是StringBuilder,因为joiner.add还将处理在我们要联接的元素之间添加定界符的问题。
© www.soinside.com 2019 - 2024. All rights reserved.