例如,使用给定的输入消息:hello java 2017 ** 2020 world
2017 , 2020
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
的情况下执行此操作。
答案 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或其他类型的集合中供以后使用,包括逗号分隔。