A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© just_nnnnx 中级黑马   /  2014-1-5 11:23  /  1183 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Test
  2. {
  3.         public static void main(String[] args)throws IOException
  4.         {
  5.                 BufferedReader bufr =
  6.                         new BufferedReader(new InputStreamReader(System.in));
  7.                 String str = bufr.readLine();
  8.                 String s = change(str);
  9.                 System.out.println(s);
  10.         }

  11.         public static String change(String str)
  12.         {               
  13.                 StringBuilder sb = new StringBuilder();
  14.                 char[] chs = str.toCharArray();
  15.                
  16.                 for(char c : chs)
  17.                 {
  18.                         if(c>='a' && c<='z')                       
  19.                                 //sb.append(String.valueOf(c).toUpperCase());       
  20.                                 //sb.append(Character.toString(c).toUpperCase());
  21.                                 c = Character.toUpperCase(c);
  22.                                 //sb.append(String.valueOf(c));
  23.                         if(c>='A' && c<='Z')
  24.                                 //sb.append(String.valueOf(c).toLowerCase());
  25.                                 //sb.append(Character.toString(c).toLowerCase());
  26.                                 c = Character.toLowerCase(c);
  27.                                 //sb.append(String.valueOf(c));
  28.                 }
  29.                 //return sb.toString();
  30.                 return new String(chs);
  31.         }
  32. }
复制代码


如上,现在的代码运行的话,大小写是转换不了的,如果换成注释的内容,就可以,现在疑惑的是,为什么现在不行呢,是因为字符数组里字符的值不能重新赋值吗?

3 个回复

倒序浏览
修改后的代码如下
  1. public static void main(String[] args)throws IOException
  2.     {
  3.             BufferedReader bufr =
  4.                     new BufferedReader(new InputStreamReader(System.in));
  5.             String str = bufr.readLine();
  6.             String s = change(str);
  7.             System.out.println(s);
  8.     }

  9.     public static String change(String str)
  10.     {               
  11.             StringBuilder sb = new StringBuilder();
  12.             char[] chs = str.toCharArray();
  13.             
  14.             for(char c : chs)
  15.             {
  16.                     if(c>='a' && c<='z')                        
  17.                             //sb.append(String.valueOf(c).toUpperCase());        
  18.                             //sb.append(Character.toString(c).toUpperCase());
  19.                             //c = Character.toUpperCase(c);   
  20.                             /*因为c为增强型for循环的迭代变量,是不能对他进行赋值的修改操作的,
  21.                                     只能得到当前他所表示的值*/
  22.                                     sb.append(Character.toUpperCase(c));  //改成这样也可以
  23.                             //sb.append(String.valueOf(c));
  24.                     if(c>='A' && c<='Z')
  25.                             //sb.append(String.valueOf(c).toLowerCase());
  26.                             //sb.append(Character.toString(c).toLowerCase());
  27.                             //c = Character.toLowerCase(c);
  28.                                     sb.append(Character.toLowerCase(c));
  29.                             //sb.append(String.valueOf(c));
  30.             }
  31.             return sb.toString(); //这也要改过来
  32.             //return new String(chs);
  33.     }
复制代码


回复 使用道具 举报
这又是另一种改法
  1. public static void main(String[] args)throws IOException
  2.     {
  3.             BufferedReader bufr =
  4.                     new BufferedReader(new InputStreamReader(System.in));
  5.             String str = bufr.readLine();
  6.             String s = change(str);
  7.             System.out.println(s);
  8.     }

  9.     public static String change(String str)
  10.     {               
  11.             //StringBuilder sb = new StringBuilder();
  12.             char[] chs = str.toCharArray();
  13.             
  14.             for(int i=0;i<chs.length;i++)
  15.             {
  16.                     if(chs[i]>='a' && chs[i]<='z'){ //加个括号,因为加了个break;语句是多条
  17.                             //sb.append(String.valueOf(c).toUpperCase());        
  18.                             //sb.append(Character.toString(c).toUpperCase());
  19.                                     chs[i] = Character.toUpperCase(chs[i]);
  20.                                     break; //加上break防止这样的情况发生:'a'-->'A',进入后面的if循环又将'A'-->'a'转化回来了
  21.                             //sb.append(String.valueOf(c));
  22.                     }
  23.                     if(chs[i]>='A' && chs[i]<='Z'){  //加个括号,因为加了个break;语句是多条
  24.                             //sb.append(String.valueOf(c).toLowerCase());
  25.                             //sb.append(Character.toString(c).toLowerCase());
  26.                                     chs[i] = Character.toLowerCase(chs[i]);
  27.                                     break;  //这个break;可加可不加
  28.                             //sb.append(String.valueOf(c));
  29.                     }
  30.             }
  31.             //return sb.toString();
  32.             return new String(chs);
  33.     }
复制代码
回复 使用道具 举报
或者这样改
将两个if语句,改为if。。elseif语句
  1. public static void main(String[] args)throws IOException
  2.     {
  3.             BufferedReader bufr =
  4.                     new BufferedReader(new InputStreamReader(System.in));
  5.             String str = bufr.readLine();
  6.             String s = change(str);
  7.             System.out.println(s);
  8.     }

  9.     public static String change(String str)
  10.     {               
  11.             //StringBuilder sb = new StringBuilder();
  12.             char[] chs = str.toCharArray();
  13.             
  14.             for(int i=0;i<chs.length;i++)
  15.             {
  16.                     if(chs[i]>='a' && chs[i]<='z')
  17.                             //sb.append(String.valueOf(c).toUpperCase());        
  18.                             //sb.append(Character.toString(c).toUpperCase());
  19.                                     chs[i] = Character.toUpperCase(chs[i]);
  20.                             //sb.append(String.valueOf(c));
  21.                     else if(chs[i]>='A' && chs[i]<='Z')  
  22.                             //sb.append(String.valueOf(c).toLowerCase());
  23.                             //sb.append(Character.toString(c).toLowerCase());
  24.                                     chs[i] = Character.toLowerCase(chs[i]);
  25.                             //sb.append(String.valueOf(c));
  26.                     
  27.             }
  28.             //return sb.toString();
  29.             return new String(chs);
  30.     }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马