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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 。。。。。。。 中级黑马   /  2013-11-8 15:24  /  1082 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 。。。。。。。 于 2013-11-8 15:29 编辑

复制代码
  1. String s = "abcdefg";
  2.         public static void swap(String s,int start,int end){               
  3.       int num = s.charAt(start);
  4.       s.charAt(start)=s.charAt(end);
  5.       s.charAt(end)=num;
  6.         }
复制代码
字符串中字符不能互换位置吗?
例如把索引为1的字符和索引为4的字符调换位置,这样不行吗?非要转换成字符数组才能够换位置吗?

评分

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

查看全部评分

3 个回复

倒序浏览
卤煮在概念的理解上有些偏差啊,就拿你提供的代码来说吧。
首先,s.charAt(start)获得的是处于字符串s中的start角标位置的字符的ASCII码,之后你的语句的操作是把字符串s中的end角标位置的字符的ASCII码赋值给start角标位置的字符的ASCII码,这显然不对,一个常量怎么能给另一个常量赋值呢?能赋值操作的只有变量,所以你代码中s.charAt(start)=s.charAt(end);是不对的。
另外也不能赋值给常量所以s.charAt(end)=num;也是错的。

评分

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

查看全部评分

回复 使用道具 举报
字符串是常量,一旦定义就不能更改了,比如你的String s = "abcdefg",这个串“abcdefg”就不能变了,你可以重新给s赋值,但是“abcdefg”是改变不了的。
回复 使用道具 举报
另外   s.charAt(start)=s.charAt(end);这句,a.charAt(start)是取出s中对应位置的字符,比如取出的是‘a',s.charAt(end)取出的也是个字符,比如‘g’,然后你这句,翻译过来就是这样‘a' = ’f‘这样显然是不行的,倒是可以重新定义个空串 String s2 = "";然后你再用个for循环
char temp = s.charAt(start);
for(int x = 0; x < s.length(); x++){
     if(x == start)
           s2 += s.charAt(end);
      else if(x == end)
           s2 += temp;
       else
           s2 += s.charAt(x);
}
然后你return s2就行了

评分

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

查看全部评分

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