Java大写字母转换成小写字母(转载)

问题:把一个小写字母转对应的大写字母,有几种办法?

解题思路1:
使用语言自带的API

public Character toLowerCase(Character s) {
        return Character.toLowerCase(s);
        //return Character.toUpperCase(s);
    }

解题思路2:

大写字母 A~Z 的 ASCII 码范围为 [65, 90]
小写字母 a~z 的 ASCII 码范围为 [97, 122]
如果ch的 ASCII 码在 [65, 90] 的范围内, 那么我们将它的 ASCII 码增加 32 , 即可得到对应的小写字母
32 对应的二进制表示为 [00100000]
[65, 96] 对应的二进制表示为 [(01000001), (01011010)], 在 [65, 96] 这个区间的所有数表示 32 的那个二进制都是 0 (即对应上述标红的三个数字位置)
65 + 32 = 01000001 + 00100000 = 01100001
而二进制中的 0 + 1 在按位或运算中可以得到 1
因此可以对 ch 的 ASCII 码与 32 做按位或运算,替代 ch 与 32 的加法运算

特别是当我们不知道当前字符是大小还是小写的时候,使用位运算异或32可以减少一次if/else判断

因为小写字母的二进制表示在32的那个位都是0,所有小写字母与32异或,对应位就会变成1,整个数字就会变成对应大写字母

而反过来,所有大写字母的二进制表示在32的那个位都是1,与32异或,对应位就会变成0,整个数字就会变成对应小写字母

//lower to upper or upper to lower
public Character transform(char s){

  return (char)s^32;
}

 


原文链接:https://blog.csdn.net/LX__dream/article/details/124050422

posted @ 2022-12-19 10:33  Mars.wang  阅读(370)  评论(0编辑  收藏  举报