Java解析包含整数和多个分隔符的字符串

标签 java

这是一个示例字符串,其中包含 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/

相关文章:

java - 跨多个域的 Tomcat 集成 Windows 身份验证

java - 是否需要在每次查询时关闭实体管理器?

java - 在Java中中断另一个线程的run方法中的一个线程

java - 读取src中相对静态文件

Java:文件写入错误,访问被拒绝

java - 将多个 PreparedStatements 合并在一起

java - 为基本排行榜保存数据?

java - 通过套接字发送图片(Java PC - Android)

java - Tomcat 8.5.33 Java WebApp 突然变慢了

java - 使用 Java API 绕过垃圾箱从 HDFS 删除文件