Java 如何实现int和char类型的比较

首先举个栗子🌰:

	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);
	 }
}

码字不易,随手点赞哦!🙈🙈🙈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值