我有一个包含字符串的文件,该字符串又包含10位数字。我需要用正则表达式提取数字,并将它们放入数组中。 我想我可以使用\d{10}
,但我不确定如何实际将其应用于Java。从字符串获取一组数字
此外,复杂性的另一个元素是潜在的,如果有很多数字,可能会有多个不同形式的数字,如123456745-9
和123456745-95
表示一个范围。我想提取这些数字。 (我可以处理在java中创建数字范围,正则表达式不是必需的)
任何提示将不胜感激!
我有一个包含字符串的文件,该字符串又包含10位数字。我需要用正则表达式提取数字,并将它们放入数组中。 我想我可以使用\d{10}
,但我不确定如何实际将其应用于Java。从字符串获取一组数字
此外,复杂性的另一个元素是潜在的,如果有很多数字,可能会有多个不同形式的数字,如123456745-9
和123456745-95
表示一个范围。我想提取这些数字。 (我可以处理在java中创建数字范围,正则表达式不是必需的)
任何提示将不胜感激!
你可能分裂的非数字字符,但保持-
:
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]
正则表达式比你想象的要简单。你只需要匹配任何数字一次或多次。
例子:
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'
会有可能保持数字与 - 在一起?否则对我来说难以跟踪哪些信号会聚在一起 – Lemonio
对不起,我没有看到您的回复。您已经有了答案,但为了完整起见,我在回答 – greedybuddha
你想要什么最终阵列的内容是什么?整型?字符串? 此外,将123456745-9表示5个唯一编号(123456745,123456746,...,123456749)还是什么?如果是这样,那些不是10位数字。 文件是如何组织的?按行?它是什么记录?每行只包含一个10位数字吗? – John
假设我有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