黑马程序员技术交流社区

标题: 关于length问题 [打印本页]

作者: Dijkstra    时间: 2014-4-18 12:29
标题: 关于length问题
                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;               
                }
为什么以这种方式翻转字符串不可以
作者: 展展    时间: 2014-4-18 12:50
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:51
本帖最后由 月光海 于 2014-4-18 12:52 编辑

s.charAt(i)和s.charAt(s.length()-i-1);都是取出字符串中的相应位置的字符。你将一个字符赋给另外一个字符你觉得可以吗,这句话用字符串也可以表示,你觉得下面的代码能编译通过吗?   “ 小明”=“小李”;
作者: Dijkstra    时间: 2014-4-18 14:09
本帖最后由 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 ] 代表的事字符地址,你说的是这个意思吗
作者: 左拉    时间: 2014-4-18 14:17
String字符串对象内容不能改变。对String的每次修改操作实际是改变了字符串内容然后新开辟了地址。
所以要想实现反转功能,必须定义一个String的新对象存储然后输出才有效果
作者: 创造命运    时间: 2014-4-18 14:36
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));


作者: 陈文怀    时间: 2014-4-19 14:15
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;都是可以的
作者: 千殇轮回    时间: 2014-4-19 15:27
s.charAt(i)和s.charAt(s.length()-i-1)都是取出字符串中的相应位置的字符值,你将一个值赋予另一个值,这当然不行了
作者: Dijkstra    时间: 2014-4-19 20:45
千殇轮回 发表于 2014-4-19 15:27
s.charAt(i)和s.charAt(s.length()-i-1)都是取出字符串中的相应位置的字符值,你将一个值赋予另一个值,这 ...

那对于数组 arr ,arr=arr[arr.length-i] 怎么就可以赋值呢
作者: Dijkstra    时间: 2014-4-19 20:46
月光海 发表于 2014-4-18 12:51
s.charAt(i)和s.charAt(s.length()-i-1);都是取出字符串中的相应位置的字符。你将一个字符赋给另外一个字符 ...

那对于数组 arr ,arr=arr[arr.length-i] 怎么就可以赋值呢
跟数组什么区别
作者: 千殇轮回    时间: 2014-4-19 21:08
本帖最后由 千殇轮回 于 2014-4-19 21:13 编辑

数组传的是一个地址,你可以去了解一下数组在内存中的存储情况
作者: zms2100    时间: 2014-4-19 21:34
展展 发表于 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());
复制代码





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