2015-10-18 40 views
2

我有一個字符串,我想確保格式始終是+後跟數字。
下面將工作:如何除掉第一個字符以外的字符串中的所有非數字?

String parsed = inputString.replaceAll("[^0-9]+", ""); 
if(inputString.charAt(0) == '+') { 
    result = "+" + parsed; 
} 
else { 
    result = parsed; 
} 

但是,有沒有辦法讓在replaceAll一個正則表達式,將保持+(如果存在)的字符串的開頭和替換所有非數字在第一線?

+0

NB:'replaceAll'將不添加'+'的情況下,有沒有,所以我不明白你正在尋找 – 2015-10-18 12:14:50

+0

[This regex](https:// regex101。我相信:搜索'(^ [+])| [^ 0-9] +'並替換爲'$ 1'。 –

+0

從你的代碼中,你似乎允許輸入諸如'abd + 3G45; {',這對我來說不太合理。您可能想要聲明輸入匹配某種模式'[+]?\ s * \ d + \ s *'而不是(白名單)。 – nhahtdh

回答

1

下面的語句與給定的正則表達式將做的工作:

String result = inputString.replaceAll("(^\\+)|[^0-9]", "$1"); 

(^\\+) find either a plus sign at the beginning of string and put it to a group ($1), 
|   or 
[^0-9] find a character which is not a number 
$1  and replace it with nothing or the plus sign at the start of group ($1) 
+0

'+'在輸入中丟失了,例如'+ 345HHHH' – nhahtdh

+0

@nhahtdh感謝您解決這個問題。我用'|'(或)替換了'?'(零或一)來改變正則表達式。現在它正確輸出'+ 345'。 – bobbel

1

您可以使用此表達式:

String r = s.replaceAll("((?<!^)[^0-9]|^[^0-9+])", ""); 

的想法是,以取代任何非當它不是字符串的首字符(這是帶有倒序的(?<!^)[^0-9]部分)或任何不是數字的字符或加上這是字符串的初始字符(^[^0-9+]部分)。

Demo.

+0

但是,唯一可接受的非數字作爲字符串的初始字符是'+'。這個正則表達式允許任何非字符,對嗎? – Jim

+0

等同於'.replaceAll(「(^ \\ +)?[^ 0-9] +」,「$ 1」)',否? – 2015-10-18 12:17:25

+0

@Jim不,只允許加+。請參閱演示。其中一個輸入字符串是「a56b78」,它變成了「5678」。 – dasblinkenlight

0

是你可以使用這種替代的:

String parsed = inputString.replaceAll("^[^0-9+]*(\\+)|[^0-9]+", "$1"); 

如果存在與字符串中的第一個數字前,+字符組1捕獲例如:dfd+sdfd12+sdf12回報+1212(第二個+已被移除,因爲它的位置在第一個數字之後)。

1

什麼只是

(?!^)\D+ 

Java字符串:

"(?!^)\\D+" 

Demo at regex101.com

  • \D一個字符不是一個數字[^0-9]

  • 匹配10
  • (?!^)使用負lookahead來檢查,如果不是最初的字符

0

試試這個

1 - 這將允許負和正數,將匹配應用特殊字符除 - 和+在第一個位置。

(?!^[-+])[^0-9.] 

2 - 如果你只想讓+在第一位置

(?!^[+])[^0-9.] 
相關問題