2014-10-16 15 views
-1

我想用一個字符串中的空格來替換圍繞在字符串[a-zA-Z]周圍的單個數字,如下所示。用java代替周圍有數字的空格的單個數字

"Foo 12 Bar" => "Foo 12 Bar" //1 and 2 shouldn’t be replaced 
"Foo12Bar" => "Foo12Bar" // 1 and 2 shouldn’t be replaced 
"Foo1Bar" => "Foo Bar" //1 shouldn’t be replaced 
"Foo2Bar" => "Foo Bar" //2 shouldn’t be replaced 
"Foo 1Bar" => "Foo 1Bar" //1 shouldn’t be replaced(space @ left side) 

對此有何幫助?

+0

爲什麼最後一個例子沒有被替換? – 2014-10-16 12:45:31

+0

你到目前爲止有什麼嘗試。什麼是問題請讓我們詳細瞭解 – 2014-10-16 12:46:43

+0

你好卡西米爾,我會更新這個問題,似乎它的錯誤。 – Sudheera 2014-10-17 04:25:15

回答

3

您可以使用此模式與作爲置換空間:

(?<=[^0-9\\s])[0-9](?=[^0-9\\s]) 

(?<=...)(?=...)分別是回顧後和前向斷言。這只是檢查,並且這些括號之間描述的內容不是匹配結果的一部分。所以,之前和之後的字符都不會被替換。

+0

謝謝卡西米爾它的工作:) – Sudheera 2014-10-17 07:59:39

2

您可以使用字符串對象的正則表達式replaceAll調用。用空字符串替換(?<!\d)(?<!)\d(?!\d)(?!)

+0

謝謝彼得K它的工作:) – Sudheera 2014-10-17 07:49:38

3

你可以嘗試的正則表達式是這樣的:

public static void main(String[] args) { 
     String s1= "Foo1Bar"; 
     String s2 = "Foo11bar"; 
     String s3 = "foo1bar2"; 
     String regex = "(?<=[a-zA-Z])\\d(?=[a-zA-Z])";// positive look-behind and positive look-ahead for characters a-z A-Z surrounding digit 
     System.out.println(s1.replaceAll(regex, " ")); 
     System.out.println(s2.replaceAll(regex, " ")); 
     System.out.println(s3.replaceAll(regex, " ")); 
    } 

O/P:

Foo Bar 
Foo11bar 
foo bar2 
+0

感謝TheLostMind它的工作:) – Sudheera 2014-10-17 07:47:40

0
input.replaceAll("([^\\d])\\d([^\\d])", "$1$2"); 

使用正則表達式是與任何非數字字符包圍的數字相匹配。因此,整個比賽只是由匹配「\ d」的單個數字字符之前和之後的字符替換。

+0

只有代碼的答案在這裏SO是因爲雖然他們可能會嚴格回答這個問題,他們並沒有提供太多的洞察提問者或者遇到問題的未來用戶。會鼓勵你提供一個解釋,解釋爲什麼你的答案的答案是OP的問題 – StormeHawke 2014-10-16 14:00:03

+0

如果字符串像'a1b2c',將不起作用,因爲'b'將被第一個替換'a1b'消耗掉,它阻止它在'b2c中被使用'。在這種情況下[look-around](http://www.regular-expressions.info/lookaround.html)是必要的。 – Pshemo 2014-10-16 15:20:45

+0

另外Java''''是字符串中的特殊字符,所以要創建代表這個字面值的字符串,您需要將它寫爲'「\\」'這意味着'\ d'正則表達式需要寫成'「\\ d「'。最後一件事實際上並不是一個問題,但也許有所改進,無論如何否定'\ d'你不需要寫成'[^ \ d]',你可以簡單地使用'\ D'。 – Pshemo 2014-10-16 15:25:12

相關問題