2015-03-31 83 views
1

我需要将'\w(space)\w'替换为'\w\w'(不含空格)。更换前更改结果组文本?

Pattern.compile("\\w \\w").matcher("a b c d e f ...").replaceAll("$0") 

是否可以改变更换前导致'$ 0组(删除空格)?

我需要回到 'AB CD EF'

更复杂的例子:

123 321 321 ... 123 number - >123321321...123 number

正则表达式(\d{3})+(number)

+0

什么是去除或留出空间的规则? – Pshemo 2015-03-31 12:33:58

+0

只有数字块之间的空格被删除。 – wtrclr 2015-03-31 12:38:28

+0

这与您以前的要求不一致,在这里“'a b c d e f”'应该成为“ab cd ef”'。 – Pshemo 2015-03-31 12:39:34

回答

1

在这个简单的情况下,每场比赛将有一个单独的空间,因此删除的空间就意味着有一个空字符串替换。此外,String可以直接做到这一点,就像这样:

String res = "a b c d e f ...".replaceAll("\\w \\w", ""); 

一个比较有意思的情况是,当你需要为你做的替代品来处理每场比赛。在这种情况下,你应该使用appendReplacementappendTail方法,其协同工作:

Pattern p = Pattern.compile("\\w \\w"); 
Matcher m = p.matcher("a b c d e f ..."); 
StringBuffer sb = new StringBuffer(); 
while (m.find()) { 
    m.appendReplacement(sb, "#"); 
} 
m.appendTail(sb); 
String result = sb.toString(); 
1

如果要执行一些操作在匹配的结果上,那么你必须使用额外的StringBufferMatcher.appendReplacement()方法。

但是,您可以实现这一点没有太:

String result = "a b c d e f".replaceAll("(\\w) (\\w)", "$1$2"); 
+0

你的片段返回'abcdef',但我需要'ab cd ef' – wtrclr 2015-03-31 12:02:11

+0

@wtrclr更新了答案。 – 2015-03-31 12:04:29

+0

它的工作原理,但如果我需要将每个'123 231 ... 123数字'转换为123231 ... 123数字'。我不知道三个数字的组数。表达式:'(\ d {3})+ number' – wtrclr 2015-03-31 12:20:25