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

时间:2017-12-11 15:20:33

标签: java string token extract digits

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

  • 当选择== 2输出2017 , 2020
  • 当选择== 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的情况下执行此操作。

1 个答案:

答案 0 :(得分:1)

正则表达式?

您可以在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

     

您好
  java的
  世界

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