下面代码中输入字符串中大写字母可以转化为小写,小写却不能换成大写,为什么?
import   java.io.*;
public class Exec5_1
{
public   static   void   main(String[]   args)
{
try
{
System.out.println("请输入字符串:");
BufferedReader   br=new   BufferedReader(new InputStreamReader(System.in));
String s=br.readLine();
char a[]=s.toCharArray();
for(int i=0;i<a.length;i++)
{
if(Character.isLowerCase(a[i]))
{
a[i]-=32;//出问题的地方
}
if(Character.isUpperCase(a[i]))
{
a[i]+=32;
}
}
String str=new String(a);
System.out.println(str);
}
catch(IOException   e)
{
e.printStackTrace();
}
}
}

解决方案 »

  1.   

    原因是因为你第二句 if 前面没有 else,导致又变回来了,应该是:
    if(Character.isLowerCase(a[i])) {
      a[i]-=32;//出问题的地方
    } else if(Character.isUpperCase(a[i])) {
      a[i]+=32;
    }
    不过其实你的代码太犯繁琐了,循环里面一句话就够了:
      if (Character.isLetter(a[i])) a[i] ^= 0x20;
      

  2.   

    这个咋解释?ASCII设计的时候,对于英文字母,就是靠第6位bit来区分大小还是小写的。也就是你原来的代码为啥要 +32 或 -32。最后,“^” 是位运算的异或,大致就是这样了。
      

  3.   

    楼主的逻辑感不强啊,建议使用debug调试,一步一步看值的变化。