Java 从字符串中获取一组数字

Java 从字符串中获取一组数字,java,regex,Java,Regex,我有一个包含字符串的文件,而字符串又包含10位数字。我需要用正则表达式提取这些数字,并将它们放入一个数组中。 我想我可以使用\d{10},但我不确定如何在Java中实际应用它 此外,另一个复杂因素可能是,如果存在大量数字,则可能存在多个不同形式的数字,如表示范围的123456745-9和123456745-95。我也想提取这些数字。(我可以用java创建数字范围,不需要正则表达式) 任何提示都将不胜感激 正则表达式比你想象的要简单。您只需将任何数字匹配一次或多次 例如: String line

我有一个包含字符串的文件,而字符串又包含10位数字。我需要用正则表达式提取这些数字,并将它们放入一个数组中。 我想我可以使用
\d{10}
,但我不确定如何在Java中实际应用它

此外,另一个复杂因素可能是,如果存在大量数字,则可能存在多个不同形式的数字,如表示范围的
123456745-9
123456745-95
。我也想提取这些数字。(我可以用java创建数字范围,不需要正则表达式)


任何提示都将不胜感激

正则表达式比你想象的要简单。您只需将任何数字匹配一次或多次

例如:

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)+"'");
}
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));
该输出如下所示

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

正则表达式比你想象的要简单。您只需将任何数字匹配一次或多次

例如:

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)+"'");
}
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));
该输出如下所示

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

您可以在非数字字符上拆分,但保留
-

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

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)+"'");
}
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]

您可以在非数字字符上拆分,但保留
-

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

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)+"'");
}
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]

您希望最终数组的内容是什么?整数?串?此外,123456745-9是否表示5个唯一的数字(123456745、123456746、…、123456749)或什么?如果是这样,那不是10位数。文件是如何组织的?排队?这是什么记录吗?每行是否只包含一个10位数字?假设我有bla bla bla 123456789 bla bla 123456789 bla bla 123456765-9 bla bla bla 123456767-89 bla bla bla我想从上面得到[123456789,12345678123456765-9,123456767-89]您希望最终数组的内容是什么?整数?串?此外,123456745-9是否表示5个唯一的数字(123456745、123456746、…、123456749)或什么?如果是这样,那不是10位数。文件是如何组织的?排队?这是什么记录吗?每一行是否只包含一个10位数字?假设我有bla bla bla 123456789 bla bla 123456789 bla bla 123456765-9 bla bla bla 123456767-89 bla bla bla我想从上面得到的[123456789,12345678123456765-9,123456767-89]是否可以将这些数字与-保持在一起?否则我将很难跟踪哪些人一起去抱歉,我没有看到你的反应。你已经有了你的答案,但为了完整性,我在答案中添加了你想要的内容。是否可以将数字与-保持在一起?否则我将很难跟踪哪些人一起去抱歉,我没有看到你的反应。你已经有了你的答案,但为了完整性,我在答案中添加了你想要的东西。看起来这可能是我需要的。我得测试一下。谢谢@Lemonio我已修改为使用您在评论中给出的示例。感谢您的明确和彻底的回复!现在我将尝试自己完成java的其余部分。看起来这可能是我所需要的。我得测试一下。谢谢@Lemonio我已修改为使用您在评论中给出的示例。感谢您的明确和彻底的回复!我现在将尝试自己完成java的其余部分