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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Dijkstra 中级黑马   /  2014-4-18 12:29  /  1409 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                String s = "helloWorld";
               
                for (int i = 0; i < (s.length())/2; i++) {
                        char temp = s.charAt(i);
                        s.charAt(i) = s.charAt(s.length()-i-1);
                        s.charAt(s.length()-i-1) = temp;               
                }
为什么以这种方式翻转字符串不可以

11 个回复

倒序浏览
char charAt(int index)
          返回指定索引处的 char 值。
这个方法只是返回索引处的 char 值,应该不是和String s绑定的吧,只是把他索引处的 char 拿出来而已。
字符串反转可以这样写:

  1. String oldstr="abcde";
  2. String newstr="";

  3. for(int i=oldstr.length()-1;i>=0;i--){               
  4. String str=oldstr.substring(i,i+1);
  5. newstr=newstr+str;
  6. }

  7. System.out.println("翻转后的字符串:"+newstr);
复制代码
回复 使用道具 举报
本帖最后由 月光海 于 2014-4-18 12:52 编辑

s.charAt(i)和s.charAt(s.length()-i-1);都是取出字符串中的相应位置的字符。你将一个字符赋给另外一个字符你觉得可以吗,这句话用字符串也可以表示,你觉得下面的代码能编译通过吗?   “ 小明”=“小李”;

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 Dijkstra 于 2014-4-18 14:11 编辑
月光海 发表于 2014-4-18 12:51
s.charAt(i)和s.charAt(s.length()-i-1);都是取出字符串中的相应位置的字符。你将一个字符赋给另外一个字符 ...

s.charAt(i)代表的是字符,而数组中的arr[ i ] 代表的事字符地址,你说的是这个意思吗
回复 使用道具 举报
String字符串对象内容不能改变。对String的每次修改操作实际是改变了字符串内容然后新开辟了地址。
所以要想实现反转功能,必须定义一个String的新对象存储然后输出才有效果
回复 使用道具 举报
char charAt(int index)
          返回指定索引处的 char 值。s.charAt(i) = s.charAt(s.length()-i-1);这是一个赋值语句。那么左边应该是一个变量才对。s.charAt(i) 是一个具体的字符,请问怎么能给一个具体的字符赋值呢?
下面是我写的一点代码:
String  s = "HelloWorld";
char[] ch = s.toCharArray();
for (int i = 0; i < ch.length/2; i++)
{
        temp = a[i];
        a[i] = a[ch.length-i-1];
        a[ch.length-i-1] = a[i];
}
System.out.println(Arrays.toString(ch));

评分

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

查看全部评分

回复 使用道具 举报
for (int i = 0; i < (s.length())/2; i++) {
                        char ch1 = s.charAt(i);
                        char ch2 = s.charAt(s.length()-i-1);       
                        char temp = ch1;
                        ch1 = ch2;
                        ch2 = temp;
int x = 5;
int y = 6;
5 = 6;是肯定编译不通过的,s.charAt(i) = s.charAt(s.length()-i-1);
x = y;或x = 6;都是可以的

评分

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

查看全部评分

回复 使用道具 举报
s.charAt(i)和s.charAt(s.length()-i-1)都是取出字符串中的相应位置的字符值,你将一个值赋予另一个值,这当然不行了
回复 使用道具 举报
千殇轮回 发表于 2014-4-19 15:27
s.charAt(i)和s.charAt(s.length()-i-1)都是取出字符串中的相应位置的字符值,你将一个值赋予另一个值,这 ...

那对于数组 arr ,arr=arr[arr.length-i] 怎么就可以赋值呢
回复 使用道具 举报
月光海 发表于 2014-4-18 12:51
s.charAt(i)和s.charAt(s.length()-i-1);都是取出字符串中的相应位置的字符。你将一个字符赋给另外一个字符 ...

那对于数组 arr ,arr=arr[arr.length-i] 怎么就可以赋值呢
跟数组什么区别
回复 使用道具 举报
本帖最后由 千殇轮回 于 2014-4-19 21:13 编辑

数组传的是一个地址,你可以去了解一下数组在内存中的存储情况
回复 使用道具 举报
展展 发表于 2014-4-18 12:50
char charAt(int index)
          返回指定索引处的 char 值。
这个方法只是返回索引处的 char 值,应 ...

LS们讲的基本都是对的,方式也多样,不过如果考虑底层效率的话,不建议循环语句中String=String+String;
【在底层相当于多次创建StringBuilder对象并调用append()方法;】
代码示例:   (可能不是最精简的,只不过是对添加String部分的优化展示)
  1. String str = "HelloWorld";
  2. StringBuilder stb = new StringBuilder();
  3. for(int i = str.length()-1;i>=0;i--){
  4.         stb.append(str.charAt(i));
  5. }
  6. System.out.println(stb.toString());
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马