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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 路边小色狼 于 2013-9-8 16:45 编辑

public class StringTest2
//将字符串进行反转
/*思路一:用replace*/
{
public static void main(String[] args)
     {
         String s="abcds";
        System.out.println(fanZhuan(s));
  
      }
public static String fanZhuan(String str)
     {
  
  for(int start=0,end=str.length()-1;end-start>0;start++,end--)
            {
          char x=str.charAt(start);     //定义第三变量,与数组一样的方法换序
          str.replace(str.charAt(start), str.charAt(end));//用String的替换功能
          str.replace( str.charAt(end),x);
            }
  System.out.println(str);//问题出来了,这步打印出来还是“abcds”,replace不算是重新给str赋值吗?
  return str;
     }
}

评分

参与人数 1技术分 +1 收起 理由
张智文 + 1

查看全部评分

5 个回复

倒序浏览
打印当然不会变,首先字符串被初始化之后就不会变了,所以replace方法也改变字符串,这个方法是将字符串改变成一个新的字符串返回,而原来的字符串没有改变。
回复 使用道具 举报
本帖最后由 垂天云 于 2013-9-8 16:46 编辑

字符串对象一旦创建,就不会被改变,存在于堆内存中。
重新赋值是把新的字符串对象的地址值赋给了引用。

参考反转代码:

  1. //将字符串反转。
  2. /*
  3. 思路:
  4. 1,将字符串变成数组。
  5. 2,对数组反转。
  6. 3,将数组变成字符串。
  7. */
  8. class StringTest
  9. {
  10. public static void sop(String str)
  11. {
  12.   System.out.println(str);
  13. }
  14. public static void main(String[] args)
  15. {
  16.   String s = "adjajlka";</P>
  17. sop("("+s+")");

  18. sop("("+reverseString(s)+")");  
  19. }

  20. public static String reverseString(String s,int start,int end)
  21. {
  22. //字符串变数组。
  23. char[] chs = s.toCharArray();

  24. //反转数组。
  25. reverse(chs,start,end);

  26. //将数组变成字符串。
  27. return new String(chs);
  28. }
  29. public static String reverseString(String s)
  30. {
  31. return reverseString(s,0,s.length());

  32. }

  33. private static void reverse(char[] arr,int x,int y)
  34. {
  35. for(int start=x,end=y-1; start<end ; start++,end--)
  36. {
  37. swap(arr,start,end);
  38. }
  39. }
  40. private static void swap(char[] arr,int x,int y)
  41. {
  42. char temp = arr[x];
  43. arr[x] = arr[y];
  44. arr[y] = temp;
  45. }
  46. }
复制代码
回复 使用道具 举报 1 0
StringBuffer有个reverse方法直接使用就可以了
回复 使用道具 举报
垂天云 发表于 2013-9-8 16:38
字符串对象一旦创建,就不会被改变,存在于堆内存中。
重新赋值是把新的字符串对象的地址值赋给了引用。

恩,懂了,再做个赋值动作就好了
回复 使用道具 举报
唉,还是不行。看来这方法走不通
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马