2013-06-05 166 views
0

我有一個包含字符串的文件,該字符串又包含10位數字。我需要用正則表達式提取數字,並將它們放入數組中。 我想我可以使用\d{10},但我不確定如何實際將其應用於Java。從字符串獲取一組數字

此外,複雜性的另一個元素是潛在的,如果有很多數字,可能會有多個不同形式的數字,如123456745-9123456745-95表示一個範圍。我想提取這些數字。 (我可以處理在java中創建數字範圍,正則表達式不是必需的)

任何提示將不勝感激!

+0

你想要什麼最終陣列的內容是什麼?整型?字符串? 此外,將123456745-9表示5個唯一編號(123456745,123456746,...,123456749)還是什麼?如果是這樣,那些不是10位數字。 文件是如何組織的?按行?它是什麼記錄?每行只包含一個10位數字嗎? – John

+0

假設我有bla bla bla 123456789 bla bla 123456789 bla bla 123456765-9 bla bla bla 123456767-89 bla bla 從上面我想要得到[123456789,123456789,123456765-9,123456767-89] – Lemonio

回答

3

你可能分裂的非數字字符,但保持-

String[] numbers = input.split("[^\\-\\d]+"); 

例子:

String input = "bla bla bla 123456789 bla bla 123456789 bla bla 123456765-9 bla bla bla 123456767-89 bla bla"; 
input = input.replaceFirst("^[^\\-\\d]*", ""); //remove the leading non-digits if any 
String[] numbers = input.split("[^\\-\\d]+"); //split 
System.out.println(Arrays.toString(numbers)); 

輸出:

[123456789, 123456789, 123456765-9, 123456767-89] 
+0

中添加了您要查找的內容,這看起來可能是我需要的。我將不得不測試它。謝謝! – Lemonio

+0

@Lemonio我修改了使用你在評論中給出的例子。 – assylias

+0

感謝您的明確和徹底的迴應!我現在會嘗試自己完成其餘的java – Lemonio

0

正則表達式比你想象的要簡單。你只需要匹配任何數字一次或多次。

例子:

String line = "a line with some digits 123456745-9 and maybe some more 343-34 and a single 1 99 "; 
String regexpattern = "(\\d+)(-(\\d+))?"; 
Pattern pattern = Pattern.compile(regexpattern); 
Matcher matcher = pattern.matcher(line); 
while (matcher.find()){ 
    System.out.println("number= '" + matcher.group(1)+"'"); 
    if (matcher.group(3) != null) 
     System.out.println("range '" + matcher.group(3)+"'"); 
} 

這個輸出將是以下

number= '123456745' 
ranges to '9' 
number= '343' 
ranges to '34' 
number= '1' 
number= '99' 
+0

會有可能保持數字與 - 在一起?否則對我來說難以跟蹤哪些信號會聚在一起 – Lemonio

+0

對不起,我沒有看到您的回覆。您已經有了答案,但爲了完整起見,我在回答 – greedybuddha