黑马程序员技术交流社区
标题:
String的给字符串反转的练习,求助
[打印本页]
作者:
路边小色狼
时间:
2013-9-8 15:35
标题:
String的给字符串反转的练习,求助
本帖最后由 路边小色狼 于 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;
}
}
作者:
xiaoxu
时间:
2013-9-8 16:22
打印当然不会变,首先字符串被初始化之后就不会变了,所以replace方法也改变字符串,这个方法是将字符串改变成一个新的字符串返回,而原来的字符串没有改变。
作者:
垂天云
时间:
2013-9-8 16:38
本帖最后由 垂天云 于 2013-9-8 16:46 编辑
字符串对象一旦创建,就不会被改变,存在于堆内存中。
重新赋值是把新的字符串对象的地址值赋给了引用。
参考反转代码:
//将字符串反转。
/*
思路:
1,将字符串变成数组。
2,对数组反转。
3,将数组变成字符串。
*/
class StringTest
{
public static void sop(String str)
{
System.out.println(str);
}
public static void main(String[] args)
{
String s = "adjajlka";</P>
sop("("+s+")");
sop("("+reverseString(s)+")");
}
public static String reverseString(String s,int start,int end)
{
//字符串变数组。
char[] chs = s.toCharArray();
//反转数组。
reverse(chs,start,end);
//将数组变成字符串。
return new String(chs);
}
public static String reverseString(String s)
{
return reverseString(s,0,s.length());
}
private static void reverse(char[] arr,int x,int y)
{
for(int start=x,end=y-1; start<end ; start++,end--)
{
swap(arr,start,end);
}
}
private static void swap(char[] arr,int x,int y)
{
char temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
复制代码
作者:
「青春」zāI路
时间:
2013-9-8 16:40
StringBuffer有个reverse方法直接使用就可以了
作者:
路边小色狼
时间:
2013-9-8 16:45
垂天云 发表于 2013-9-8 16:38
字符串对象一旦创建,就不会被改变,存在于堆内存中。
重新赋值是把新的字符串对象的地址值赋给了引用。
恩,懂了,再做个赋值动作就好了
作者:
路边小色狼
时间:
2013-9-8 16:50
唉,还是不行。看来这方法走不通
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2