我正在尝试检查String
中是否有任何数字,如果其中没有数字 - 打印' true'否则(有数字)打印' false'。
我的代码是:
package strings;
import java.util.Scanner;
public class P58Targil3 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
boolean sw1 = true;
String st1 = in.next();
for (int i = 0; i < st1.length(); i++) {
if (st1.charAt(i) >= '0' && st1.charAt(i) <= 9)
sw1=false;
}
System.out.println(sw1);
}
}
这不起作用,我该怎么改变?
答案 0 :(得分:1)
检查字符串中是否包含数字的一种非常简单的方法是从字符串中删除所有数字,然后检查生成的字符串是否仍然是相同的长度。
String str = "Hello123!";
System.out.println(str.length() != str.replaceAll("[0-9]", "").length());
这可以通过将字符串中的所有数字0-9替换为空(空字符串),然后将其与原始字符串进行比较来实现。如果长度不同,您就会知道数字已被移除,因此必须有数字开头。
要回答您的问题,您目前正在检查i的索引处的字符的ASCII值是否大于&#39; 0&#39;的字符值。或者小于或等于整数9. ASCII编码系统中的数字(0-9)用值48-57表示,48为0,9为57.所以如果要比较字符值,这些是您可以这样做的条件:
if (st1.charAt(i) >= 48 && st1.charAt(i) <= 57) sw1 = false;
但是因为&#39; 0&#39;和&#39; 9&#39;也保持那些相同的值,你也可以比较它们。所以它也可以写成
if (st1.charAt(i) >= '0' && st1.charAt(i) <= '9') sw1 = false;
此外,该条件将评估String是否包含数字,因此您确实希望将sw1初始化为false,如果它包含数字则将其设置为true:
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
boolean sw1 = false;
String st1 = in.next();
for (int i = 0; i < st1.length(); i++) {
if (st1.charAt(i) >= 48 && st1.charAt(i) <= 57) sw1 = true;
}
System.out.println(sw1);
}