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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 雀巢咖啡 中级黑马   /  2014-4-14 22:26  /  1025 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  从键盘接收一个字符串,对字符串中的字母进行大小写互转。
    我的代码如下:
      import  java.util.*;
      public class test8 {
        public static void main(String[] args)
        {
                Scanner in=new Scanner(System.in);//输入流
                String s=in.next();
               
                for(int i=0;i<s.length();i++)
                {
                        char c=s.charAt(i);
                        if(c>'A'&&c<'a')
                        {
                                c=(char)('a'+c-65);//将大写字母转换为小写字母
                        }
                        else if(c>='a')
                        {
                                c=(char)('A'+c-97);//将小写字母转换为大写字母
                        }
               
                }
                System.out.print(s);
        }

我的循环部分明明已经对s中的字符进行了大小写转换,为何最后输出的s没变?(不要告诉我直接调用API提供的方法类库)。

}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 luoanjade 于 2014-4-14 23:08 编辑

你的转换是没问题的,只是你循环里面的操作并没有改变原来的字符串,你只是改变了循环里面的c,你在循环里面打印一下c,你就知道你的变换是没有错的。那怎样把转变后的字符串返回来呢?我做了这样的操作:
  1. import  java.util.*;
  2. public class test8 {
  3.   public static void main(String[] args)
  4.   {
  5.           Scanner in=new Scanner(System.in);//输入流
  6.           String s=in.next();
  7.           StringBuffer sb = new StringBuffer();  //********加了这行代码********
  8.           for(int i=0;i<s.length();i++)
  9.           {
  10.                   char c=s.charAt(i);
  11.                   if(c>'A'&&c<'a')
  12.                   {
  13.                           c=(char)('a'+c-65);//将大写字母转换为小写字母
  14.                   }
  15.                   else if(c>='a')
  16.                   {
  17.                           c=(char)('A'+c-97);//将小写字母转换为大写字母
  18.                   }
  19.                   sb.append(c);  //***********加了这行代码***********
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
回复好像有限制大小的,上面代码不完整,还有下面着两行:
  1.           }
  2.           s = sb.toString();
  3.           System.out.print(s);
  4.   }
  5. }
复制代码
回复 使用道具 举报
问题好像出在:String类的对象属于串常量,而串常量的值一旦建立就不会再变动。所以你创建了StringBuffer类的对象,这样创建串变量的值是可以改变的,我理解的对吧?
回复 使用道具 举报
我帮你改了改:
  1. import  java.util.*;
  2. class MyMain {
  3.         public static void main(String[] args) {
  4.                 // TODO Auto-generated method stub
  5.                 Scanner in = new Scanner(System.in);
  6.                 StringBuilder sb = new StringBuilder(in.next());//直接建立StringBuilder就行
  7.                 //小知识点:如果循环判断条件不变的话,不要重复计算,会降低效率              
  8.                 for(int i=0, len=sb.length(); i<len; i++)
  9.                 {
  10.                         char c=sb.charAt(i);
  11.                         if(c>'A'&&c<'a')
  12.                         {
  13.                                 c=(char)('a'+c-65);
  14.                         }
  15.                         else if(c>='a')
  16.                         {
  17.                                 c=(char)('A'+c-97);
  18.                         }
  19.                         sb.setCharAt(i, c);//将转换后的字符放替换进去
  20.                                 
  21.                 }
  22.                 System.out.print(sb.toString());
  23.         }

  24. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马