例如,使用给定的输入消息: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;
}
}
}
}
我想在不使用 split
、replace
、arrays
或 tokenizer
的情况下完成此操作。
最佳答案
正则表达式?
您可以在 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
2020hello
java
world
同样,您可以将它们放入列表或其他类型的集合中以供以后使用,包括逗号分隔。
关于java - 使用 Java 提取逗号分隔的数字或单词列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47756011/