这是一个示例字符串,其中包含 2 个分隔符,用于将字符串解析为整数:
"1,25,3-6,14,16-19"
必须解析上述字符串中的整数并将其添加到包含整数的 ArrayList 中。因此 ArrayList 必须包含:
1,3,4,5,6,14,16,17,18,19,25
原始字符串中的值从未被提及两次。因此,不存在交叉部分。下面你可以看到我到目前为止编写的不完整的代码,但我认为我正朝着完全错误的方向前进,应该有一种更简单的方法来解决解析。
List<Integer> temp = new ArrayList<>();
Scanner s = new Scanner(System.in);
String str = s.nextLine();
char[] strCh = str.toCharArray();
for (int j = 0; j < strCh.length; j++) {
char c = strCh[j];
String number = "";
char operator = 'n';
if (Character.isDigit(c)) {
do {
number += c;
j++;
if (j != strCh.length - 1)
c = strCh[j];
} while (j < strCh.length && Character.isDigit(c));
} else if (c == ',') {
operator = ',';
temp.add(Integer.parseInt(number));
number = "";
} else if (c == '-') {
//still not sure
}
}
最佳答案
您可以使用String#split()
两次来处理输入字符串。首先用逗号分隔,这给我们留下了一个单独的数字,或者一个单独的数字范围。然后,如果是范围,则再次用破折号分割以获得该范围的起始数字和结束数字。我们可以迭代该范围,将每个数字添加到我们的列表中。
String input = "1,25,3-6,14,16-19";
String[] parts = input.split(",");
List<Integer> list = new ArrayList<>();
for (String part : parts) {
if (part.contains("-")) {
String[] range = part.split("-");
int start = Integer.parseInt(range[0]);
int end = Integer.parseInt(range[1]);
for (int i=start; i <= end; ++i) {
list.add(i);
}
}
else {
int value = Integer.parseInt(part);
list.add(value);
}
}
这生成了以下数字列表:
1,25,3,4,5,6,14,16,17,18,19
此处演示:
Rextester
关于Java解析包含整数和多个分隔符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44360373/