您不必
split为此进行-transform-join;
replaceAll一步就能做到。
String text = "Skriv in en normal text:"; text = text.replaceAll("(\s*)(\w)(\w+)", "$1$3$2"); System.out.println(text); // prints "krivS ni ne ormaln extt:"正则表达式基本上分为3组:
1 : (s*) : any optional preceding whitespace2 : (w) : the head portion of each "word"3 : (w+) : any tail portion of each "word"
那么,作为替换字符串使它明显和清晰,切换
2和
3周围。
因此,应该清楚的是,
replaceAll使用捕获组是解决此问题的最佳方法,也是最易读的解决方案,但是该正则表达式取决于问题规范。请注意,例如,上述正则表达式将转换
text:为
extt:(即,将结肠保留在原处)。
以下变体在空白处分割
s,并对非空白字符序列的头/尾重新排序
S。这应该与您当前的
split(" ")-transform-join解决方案相同:
String text = "bob: !@#$ +-"; text = text.replaceAll("(\s*)(\S)(\S+)", "$1$3$2"); System.out.println(text); // prints "ob:b @#$! -+"这种变化可以切换
w+由单词边界包围的任何单词字符序列
b。如果这是您的需要,那么这是该工作最简单,最易读的解决方案。
String text = "abc:def!ghi,jkl mno"; text = text.replaceAll("\b(\w)(\w+)\b", "$2$1"); System.out.println(text); // prints "bca:efd!hig,klj nom"也可以看看
Matcher.replaceAll
- regular-expressions.info/分组和反向引用



