JAVA:反转字符串时已删除分隔符

JAVA:反转字符串时已删除分隔符,java,string,algorithm,reverse,Java,String,Algorithm,Reverse,通过下面的代码反转字符串时,如何包含分隔符 Pattern.compile(Pattern.quote(".")) .splitAsStream("BCTVW.") .map(s->new StringBuilder(s).reverse()) .collect(Collectors.joining(".")) 电流输出:WVTCB. 所需输出:.WVTCB 所需输出中缺少分隔符。您可以使用非捕获组,例如前瞻 Pattern.compile("(

通过下面的代码反转字符串时,如何包含分隔符

Pattern.compile(Pattern.quote("."))
       .splitAsStream("BCTVW.")
       .map(s->new StringBuilder(s).reverse())
       .collect(Collectors.joining("."))
电流输出:
WVTCB.

所需输出:
.WVTCB


所需输出中缺少分隔符。

您可以使用非捕获组,例如前瞻

Pattern.compile("(?<=\\.)")
             .splitAsStream("BCTVW.")
             .map(s->new StringBuilder(s).reverse())
             .collect(Collectors.joining("."));
Pattern.compile((?
Pattern(regex).splitAsStream(data)
具有与
data.split(regex)
类似的功能,因此它还可以删除由于拆分而创建的尾随空字符串。
例如,
“a,b,”.split(“,”
不会导致
[“a”,“b”,““”]
,而是
[“a”,“b”]
,因为数组末尾的空字符串将被删除

Pattern#splitAsStream
String#split
之间最关键的区别在于
String#split(regex)
方法重载了version
String#split(regex,limit)
其中
limit
取决于值影响其结果

如果限制是

  • positive
    它设置结果数组中的最大元素量,如
    “a,b,c,d”。拆分(“,”,3)
    将导致
    [“a”,“b”,“c,d”]
  • 0
    它导致删除尾随的空字符串(
    split(regex,0)
    split(regex)
  • 负数
    -防止
    拆分
    删除尾随的空字符串
    -这就是您所追求的
因此,不要使用
Pattern#splitAsStream
,而是使用
String#split
方法,就像您在您的:

以防前面的问题被删除

您需要在此处纠正的事项:

  • 不要将字符串中的
    分隔符
    替换为
    -
    以在
    -
    上拆分,因为您的字符串可能包含自己的
    -
    。例如
    替换为
    -
    后,“A.B-C”将变成
    A-B-C
    ,这将导致不必要的拆分
    B-C

    而是使用
    模式进行拆分。引号(分隔符)
    ——就像您在当前问题中提供的示例中所做的那样

  • 使用带有负限制参数的
    split
    来防止删除尾随的空字符串(类似于
    fileContent.split(模式(分隔符),-1)

  • 您没有将分隔符添加回结果字符串。简单的解决方案是使用
    StringJoiner-joiner=new-StringJoiner(delimiter);
    joiner.add(reversedElement)
    而不是
    StringBuilder
    ,因为
    joiner.add
    还将处理在我们想要连接的元素之间添加分隔符的问题


  • 这很接近。现在唯一的问题是,当我应用您的更改时,分隔符被删除了。我如何将分隔符添加回?
    String fileContent=“def mnop.STU”String delimiter=“[^a-zA-Z0-9']+”当前输出:fedponmUTS所需输出:fed ponm.UTS
    @chrismith”现在的问题是,当我应用您的更改时,分隔符被删除了“不完全。我建议使用
    new SringJoiner(delimiter)
    而不是
    new StringBuilder()
    应该处理将分隔符添加回结果字符串的问题。真正的问题是,您现在正在更改要解决的任务的假设,这意味着您正在将问题更改为不同的问题。提供的答案基于以下假设:分隔符不是正则表达式,而是简单的文字(因为
    被视为符号,而不是字符串)任何字符“这将发生在regex上)。@ChrisSmith如果你有类似的问题,但基于不同的假设,那么请在单独的帖子中提问,并根据你实际提出的问题判断答案,而不是根据你想问的问题…当然。我将创建一个单独的帖子。谢谢你的帮助。
    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());