首先举个栗子🌰:
char charNum1 = '1';
char charNum2 = 49;
char charNum3 = 1;
int intNum = 1;
System.out.println(charNum1 == intNum);
System.out.println(charNum3 == intNum);
System.out.println(charNum1 == charNum2);
System.out.println(charNum1 == charNum3);
System.out.println((int)charNum1 == intNum);
System.out.println((int)charNum1);
System.out.println(intNum);
System.out.println(charNum1 - intNum);
System.out.println(charNum1);
System.out.println(charNum2);
System.out.println((char)intNum);
大家先自己计算一下上面的结果啊,下面我们给出答案:
char charNum1 = '1';
char charNum2 = 49;
char charNum3 = 1;
int intNum = 1;
System.out.println(charNum1 == intNum); //false :49 == 1
System.out.println(charNum3 == intNum); //true :1 == 1
System.out.println(charNum1 == charNum2); //true : 49 == 49
System.out.println(charNum1 == charNum3);//false : 49 == 1
System.out.println((int)charNum1 == intNum);//false: 49 == 1
//然而我们定义的charNum2 = 49;所以其实49是1的acs码
System.out.println((int)charNum1);//49
System.out.println(intNum);//1
System.out.println(charNum1 - intNum)//49 - 1 = 48
System.out.println(charNum1);//1
System.out.println(charNum2);//输出:1. 即 1 为49的asc码
System.out.println((char)intNum);// 输出asc码为1的字符
从上面的代码可以看出char型变量存放的其实是对应的字符码的值,即存的是int型的数。即charNum = ‘1’ 与int类型的intNum = 1进行比较,实际上是将 charNum1 = ‘1’ 的acs码:49 与 1 进行比较,因此肯定不相等,返回false。
而charNum2 = 49,因此charNum2是char类型,因此charNum2实际存放的是asc码为49的字符:1。
下面我们接着看,那我们实际想要得到字符串中的数字的实际值,而不是它对应的asc码,应该如何操作呢? 请看下面代码:
例如: String str = “123456789”;
我们想要得到 str里面大于等于3 小于等于6的数字,应该如何操作呢?
初步想法是将str转为char数组,然后挨个去值判断是否在3-6之间,但是这是就存在一个char类型和int类型的比较了,如下:
char[] charNum = str.toCharArray();
StringBuiler sb = new StringBuilder();
for(int i = 0; i < str.length(); i++){
if(charNum[i] >= 3 && charNum[i] <= 6){
sb.append(charNum[i]));
}
}
或者直接取值:
StringBuiler sb = new StringBuilder();
for(int i = 0; i < str.length(); i++){
if(str.charAt(i) >= 3 && str.charAt(i) <= 6){
//str = "2345"
//错误❌: str.charAt(0) = '2'; 因此str.charAt(0) >= 3实际比较的是'2'的asc码. 50 >= 3
//str.charAt(0) >= 3 && str.charAt(0) <= 6 等价于 50 >= 3 && 50 <= 6
sb.append(str.charAt(i);
}
}
实际上上面两种操作都得不到我们想要的答案,因为str.charAt(i)得到的是字符,与int比较的是该字符的asc码,即 当str = “2345”时:
str.charAt(0) >= 3 && str.charAt(0) <= 6 等价于 50 >= 3 && 50 <= 6
因此正确的操作是:
str.charAt(i) - '0'
这样就可得到我们想要的答案了。
正确代码如下:
StringBuiler sb = new StringBuilder();
for(int i = 0; i < str.length(); i++){
if(str.charAt(i) - '0' >= 3 && str.charAt(i) - '0' <= 6){
//这个 -'0'很重要哦!
sb.append(str.charAt(i);
}
}
码字不易,随手点赞哦!🙈🙈🙈