2015-03-31 84 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