2012-01-04 96 views
2

一個6位數字,我有一個字符串從一個短信,如:找到字符串

「您的代碼:123456。您的參考編號爲012的總金額爲E 1250,00 ..」

現在我需要提取代碼'123456',每次都不一樣,但總是6位數。

如何從字符串中提取這6位數字?我能否以某種方式使用正則表達式?我需要確定,所以我不想在'code:'上分割。

編輯: 文本的其餘部分可能不同,但SMS中只有6位數字。

回答

13

的regexpr爲6位數字是

\d{6} 

編輯: 的代碼看起來像

public static String extractDigits(final String in) { 
    final Pattern p = Pattern.compile("(\\d{6})"); 
    final Matcher m = p.matcher(in); 
    if (m.find()) { 
    return m.group(0); 
    } 
    return ""; 
} 
+0

然而,這會發現6位數字的輸入_ – fge 2012-01-04 13:06:06

+0

它你在搜索的字符串固定爲一個以上regexpr將默認找到的第一個匹配_anywhere – mana 2012-01-04 14:34:51

+0

只有一次有6個數字在文本中,所以這解決了我的問題,謝謝! – 2012-01-04 18:35:06

6

不確定Java的正則表達式是否支持lookarounds。如果是這樣:

(?<!\d)\d{6}(?!\d) 

編輯:它的確如此。 (感謝波希米亞)

+0

的Java不支持看變通 – Bohemian 2012-01-04 13:04:41

2

爲什麼不乾脆用substring()

String s = "Your code: 123456. Your reference number is 012. The total amount is E 1250,00.."; 
String s2 = s.substring(11); 
String code = s2.substring(0, s2.indexOf(".")); 

或者只是:

String code = s.substring(11, 17); 

,因爲它總是6位數字。

+0

我編輯了我的問題。其餘的文本可以不同(之前或之後),所以這會是一個問題。 – 2012-01-04 18:30:43

0
String text = "125432"; 
    String regex = "\\D*\\d{6}\\D*"; 

    Matcher m = Pattern.compile(regex).matcher(text); 
    if(m.find()) 
     System.out.println(m.group(0).trim().substring(0,6));