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)
方法重载了versionString#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());