java - 使用 Java 提取逗号分隔的数字或单词列表

标签 java string token extract digits

例如,使用给定的输入消息:hello java 2017 ** 2020 world

  • 当 choice == 2 输出 2017 , 2020
  • 当 choice == 3 输出 hello , java , world

这是我的程序:

public static void print(String message, int choice){
    {    
        for (int i = 0; i < message.length();) {
            if (message.indexOf(" ") != -1) {
                System.out.print(message.substring(0, message.indexOf(" ")));
                message = message.substring(message.indexOf(" ") + 1);
                switch (choice) {
                    case 2: {
                        char c;
                        for (int k = 0; k < message.length(); k++) {
                            c = message.charAt(k);
                            if (Character.isDigit(c)) {
                                System.out.print(c+" , ");
                            }break;
                        }
                    }
                    case 3: {    
                        for (int z = 0; z < message.length(); z++) {
                            char tr = message.charAt(z);
                            if (Character.isAlphabetic(tr)) {

                                System.out.print(tr);
                                break;
                            }
                        }
                    }
                }
            } else {
                System.out.println(message);
                break;
            }
        }
    }
}

我想在不使用 splitreplacearraystokenizer 的情况下完成此操作。

最佳答案

正则表达式?

您可以在 Java 中使用 (\\d+) 匹配数字和单词(假设您的示例中它仅包含 ([a-zA-z]+) 的字母字符

现在您可以继续执行以下操作:

public static void print(String message, int choice) {
    switch (choice) {
        case 2:
            Pattern p = Pattern.compile("(\\d+)");
            Matcher m = p.matcher(message);
            while (m.find()) {
                System.out.println(m.group());
            }
            break;
        case 3:
            Pattern p2 = Pattern.compile("([a-zA-z]+)");
            Matcher m2 = p2.matcher(message);
            while (m2.find()) {
                System.out.println(m2.group());
            }
            break;
    }
}

除了打印组之外,您还可以将它们添加到列表中以供以后使用等。

但是我建议(正如其他人在之前的评论中所做的那样)您使用 Java 已经提供给您的可能更简单、更快的工具。

用这样的示例测试上面的代码

public static void main(String[] args) {
    String s = "hello java 2017 ** 2020 world";
    print(s, 2);
    System.out.println();
    print(s, 3);
}

打印:

2017
2020

hello
java
world

同样,您可以将它们放入列表或其他类型的集合中以供以后使用,包括逗号分隔。

关于java - 使用 Java 提取逗号分隔的数字或单词列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47756011/

相关文章:

c - 在 C 中使用 fgets 从文件中读取字符串

java - 如何将 TouchAction 命令的 String[] 转换为 Point

iOS:如何在使用 componentSeparatedByCharactersInSet 时维护分隔符

Java JDT查找方法

Java Web 启动 AMI

java - 将Java字符串插入另一个字符串而不连接?

security - 什么是基于 token 的身份验证?

drupal - 使用 token 作为数据选择器

java - 当返回的对象之一为 null 时,Java If 语句的缩写形式返回 NullPointerException

java - 带投影的聚合