2013-06-05 165 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