是否有更简单的方法来完成这样的任务,我不必使用大量的IF语句。
for (int i = 0; i < registration.length(); i++) {
char numberFromReg = registration.charAt(i);
String yearFromReg = "";
if (numberFromReg == '1') {
yearFromReg += "1";
} else if (numberFromReg == '2') {
yearFromReg += "2";
} else if (numberFromReg == '3') {
yearFromReg += "3";
} else if (numberFromReg == '4') {
yearFromReg += "4";
} else if (numberFromReg == '5') {
yearFromReg += "5";
} else if (numberFromReg == '6') {
yearFromReg += "6";
} else if (numberFromReg == '7') {
yearFromReg += "7";
} else if (numberFromReg == '8') {
yearFromReg += "8";
} else if (numberFromReg == '9') {
yearFromReg += "9";
} else if (numberFromReg == '0') {
yearFromReg += "0";
}
}
答案 0 :(得分:10)
好像你只想要numbers
所以你可以使用replaceAll
作为
yearFromReg = registration.replaceAll("\\D","");
\\D
:表示非数字值,因此replaceAll
将删除字符串中的所有非数字值。
答案 1 :(得分:3)
为了解决更优雅地处理多个StringBuilder builder = new StringBuilder();
for (int i = 0; i < registration.length(); i++) {
char numberFromReg = registration.charAt(i);
if (numberFromReg >= '0' && numberFromReg <= '9') {
builder.append(numberFromReg);
}
}
String yearFromReg = builder.toString();
语句的一般情况,这些语句都比较相同的值,但是对于不同的常量,通常使用StringBuilder
语句。在这种情况下,这将起作用,但IMO仍然是过度的。
在这种情况下,您将构建一个包含输入字符串中所有数字的字符串。一种选择是使用String yearFromReg = registration.replaceAll("\\D", "");
,只需附加任何数字,例如
String yearFromReg = registration.replaceAll("[^0-9]", "");
(是的,你可以继续使用重复的字符串连接 - 使用{{1}}更有效,更清晰。)
或者你可以使用正则表达式简单地用空字符串替换所有非数字,有效地提取所有数字:
{{1}}
或者,如果您的代码读者对正则表达式不熟悉,则相当于:
{{1}}
答案 2 :(得分:2)
首先,每次通过在循环中创建一个新字符串来清除字符串。
语法应为
Make empty string
loop {
build string
}
use string
但是,更简单的方法就是将字符附加到字符串中。不清楚为什么你需要if语句
但是,看起来你真的想从字符串中删除所有非数字,在这种情况下,你可以在起始字符串上replaceAll("[^0-9]+,"")
答案 3 :(得分:1)
检查switch语句,文档:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html
对于这个具体问题,其他人的答案实际上更准确。您不需要检查此处的所有条件
答案 4 :(得分:0)
切换语句是所有if语句的一个很好的替代,特别是因为条件在其他每个if中是相同的。使阅读更容易,更容易编写!
这是一个开关案例的例子:
switch(numberFromReg){
case '1': yearFromReg += "1";
break;
case '2': yearFromReg += "2";
break;
}
只需为if语句
添加其他每个案例