黑马程序员技术交流社区

标题: 字符数组的值能重新赋值吗? [打印本页]

作者: just_nnnnx    时间: 2014-1-5 11:23
标题: 字符数组的值能重新赋值吗?
  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. }
复制代码


如上,现在的代码运行的话,大小写是转换不了的,如果换成注释的内容,就可以,现在疑惑的是,为什么现在不行呢,是因为字符数组里字符的值不能重新赋值吗?
作者: 李兴    时间: 2014-1-5 12:06
修改后的代码如下
  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.     }
复制代码



作者: 李兴    时间: 2014-1-5 12:17
这又是另一种改法
  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.     }
复制代码

作者: 李兴    时间: 2014-1-5 12:20
或者这样改
将两个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.     }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2