扩大数字范围

时间:2019-10-29 17:32:42

标签: java regex numbers expansion

我正在尝试解决一个困扰我一段时间的问题。我创建了一个小型解析器,该解析器读取.ini文件,然后将数据存储在ArrayList中。但是,我遇到了以下片段:

while (!(sCurrentLine.equals("[End]"))) {
    formats.add(sCurrentLine);
    for (int i = 0; formats.size() > 0; i++) {

    }
    sCurrentLine = br.readLine();
}

现在这是我必须向formats类型的ArrayList中添加值的地方。 将添加的值如下:

0900.013-017=LABEL
0900.018-029=LABEL

现在范围介于两者之间,我还必须确保'0900'和'= label'随着数字的扩展而重复自己,例如:

0900.013=LABEL
0900.014=LABEL
0900.015=LABEL
0900.016=LABEL and so on...

并将其存储回ArrayList中。

我不想依赖第三方库。这个你能帮我吗。

1 个答案:

答案 0 :(得分:1)

使用正则表达式解析范围,然后遍历解析的值。有一些微调需要完成,但是我认为这应该可以帮助您入门。

    Pattern rangePattern = Pattern.compile("([0-9]+)\\.([0-9]+)-([0-9]+)=(.*)$");
    Matcher rangeMatcher = rangePattern.matcher("0900.13-17=First label");

    if (rangeMatcher.matches()) {

        String prefix = rangeMatcher.group(1);
        int start = Integer.parseInt(rangeMatcher.group(2));
        int end = Integer.parseInt(rangeMatcher.group(3));
        String label = rangeMatcher.group(4);

        for (int r = start; r < end; r++) {
            System.out.println(prefix + "." + r + "=" + label);
        }
    }

创建一次模式,然后每次通过循环获取新的匹配器。

结果:

0900.13=First label
0900.14=First label
0900.15=First label
0900.16=First label