扩大数字范围
Expand the range of numbers
我正在尝试解决一个困扰我一段时间的问题。我创建了一个小型解析器,它读取 .ini
文件,然后将数据存储在 ArrayList
中。但是,我遇到了以下代码段:
while (!(sCurrentLine.equals("[End]"))) {
formats.add(sCurrentLine);
for (int i = 0; formats.size() > 0; i++) {
}
sCurrentLine = br.readLine();
}
现在这是我必须将值添加到类型 ArrayList
的 formats
的地方。
将像这样添加的值:
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
。
我不想依赖第三方库。这个你能帮我吗。
使用正则表达式解析范围,然后遍历解析的值。需要进行一些微调,但我认为这应该可以帮助您入门。
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
我正在尝试解决一个困扰我一段时间的问题。我创建了一个小型解析器,它读取 .ini
文件,然后将数据存储在 ArrayList
中。但是,我遇到了以下代码段:
while (!(sCurrentLine.equals("[End]"))) {
formats.add(sCurrentLine);
for (int i = 0; formats.size() > 0; i++) {
}
sCurrentLine = br.readLine();
}
现在这是我必须将值添加到类型 ArrayList
的 formats
的地方。
将像这样添加的值:
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
。
我不想依赖第三方库。这个你能帮我吗。
使用正则表达式解析范围,然后遍历解析的值。需要进行一些微调,但我认为这应该可以帮助您入门。
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