通过下面的代码反转字符串时,如何包含定界符?
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(regex).splitAsStream(data)
]具有与data.split(regex)
相似的功能,因此它也删除了拆分产生的尾随空字符串。例如,"a,b,".split(",")
不会产生["a","b",""]
,而会产生["a","b"]
,因为将删除数组末尾的空字符串。
Pattern#splitAsStream
和String#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());
您需要在此处纠正的内容:
- 不要将字符串中的
delimiter
替换为-
以在-
上分割,因为您的字符串可能包含其自己的-
。例如,将"A.B-C"
替换为.
后的-
将变为A-B-C
,这将导致不必要的拆分B-C
。代替使用
Pattern.quote(delimiter)
进行拆分-就像您在当前问题中提供的示例中所做的那样。- 使用带有负数限制参数的
split
来防止删除尾随的空字符串(类似于fileContent.split(Pattern(delimiter), -1)
)- 您没有将定界符添加回结果字符串。一种简单的解决方案是使用
StringJoiner joiner = new StringJoiner(delimiter);
joiner.add(reversedElement)
而不是StringBuilder
,因为joiner.add
还将处理在我们要联接的元素之间添加定界符的问题。