这是一个示例String,它包含2个用于将String解析为整数的分隔符:
"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
}
}
答案 0 :(得分:3)
您可以使用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
在这里演示:
答案 1 :(得分:3)
为确保没有重复项,并按预期顺序使用Set:
String inputData = "1,25,3-6,14,16-19";
String[] numberRanges = inputData.split(",");
Set<Integer> set = new TreeSet<>();
for (String numberRange : numberRanges) {
if (numberRange.contains("-")) {
String[] range = numberRange.split("-");
int startIndex = Integer.valueOf(range[0]);
int endIndex = Integer.valueOf(range[1]);
for (int i = startIndex; i <= endIndex; ++i) {
set.add(i);
}
} else {
set.add(Integer.valueOf(numberRange));
}
}
System.out.println(set);
答案 2 :(得分:1)
您可以尝试这样的事情:
String input = "1,25,3-6,14,16-19";
List<Integer> output = new ArrayList<Integer>();
for(String s : input.split(",")){
try{
if(!s.contains("-")){
output.add(Integer.parseInt(s));
}
else{
int i= Integer.parseInt(s.split("-")[0]);
int upperBound = Integer.parseInt(s.split("-")[1]);
for(;i<=upperBound;i++){
output.add(i);
}
}
}catch(NumberFormatException e){
e.printStackTrace();
}
}
Collections.sort(output); // sort the result
System.out.println(output); // test
<强>输出强>
[1, 3, 4, 5, 14, 16, 17, 18, 19, 25]
答案 3 :(得分:-2)