黑马程序员技术交流社区

标题: 字符串反转问题 [打印本页]

作者: 施俊    时间: 2012-3-23 12:34
标题: 字符串反转问题
自己编码字符串反转,用到了replace方法,为什么没有成功?还是打印的原来的字符串?
  1. class Test1
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String str = "abcdefghijklmn";
  6.                 System.out.println("源字符串:"+str);
  7.                 Fanzhuan f=new Fanzhuan();
  8.                
  9.                 System.out.println("反转之后:"+f.fanZ(str));
  10.         }
  11. }

  12. class Fanzhuan
  13. {
  14.         public String fanZ(String s)
  15.         {
  16.                 int start=0,end=s.length()-1;
  17.                 String s1=null;
  18.                 while (start<end)
  19.                 {
  20.                         s1 = s.replace(s.charAt(start),s.charAt(end));
  21.                         start++;
  22.                         end--;

  23.                 }
  24.                 return s1;
  25.         }
  26. }
复制代码

作者: liumeng    时间: 2012-3-23 12:46
public class StringReverse {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
    String a="asdasds";
    StringBuffer s=new StringBuffer(a);
   System.out.println(s.reverse());
        }

}

作者: 施俊    时间: 2012-3-23 13:01
liumeng 发表于 2012-3-23 12:46
public class StringReverse {

        /**

要做的不是使用StringBuffer方法,就是自己写个反转的方法,老毕用转成数组的方式实现的,能不能不用而直接使用换位的方法去实现字符串反转的方法?我想到了这个方法,但是没有成功,打印的仍然是原来的字符串。
作者: 杨朝辉    时间: 2012-3-23 13:09
s1 = s.replace(s.charAt(start),s.charAt(end));
这句有问题,s作为参数,在这个方法运行的过程中s的值是不变的。每次循环只是将s中end位置的字符赋值给start位置。
所以最后的结果是将字符串中间的字符替换成中间下一个位置的字符。
作者: 李涛涛    时间: 2012-3-23 13:09
你的代码犯了一个错误 ,replace()函数是替换,而不是对调。反转一个字符串的函数为reverse();因些你的fanzhuang类的方法可以这样修改

class Fanzhuan
{
        public String fanZ(String s)
        {
                StringBuilder sb = new StringBuilder(s);
                return sb.reverse().toString();
        }
}
作者: 杨朝辉    时间: 2012-3-23 13:13
String replace(char oldChar, char newChar)
          返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
作者: 李成    时间: 2012-3-23 13:17
s.replace(s.charAt(start),s.charAt(end))中的replace方法不会对s进行修改,每次都返回只对两个字符进行替换后的新的字符串。
作者: 张明星    时间: 2012-3-23 13:24
  1. public String fanZ(String s)
  2.         {       
  3.                         int length = s.length();
  4.                         String s1 = "";
  5.                         for (int i = 0; i < length; i++)
  6.                         s1 = s.charAt(i) + s1;
  7.                         return s1;
  8.         }
复制代码
这个方法没有转成数组,应该可以符合你的要求。
作者: 李涛涛    时间: 2012-3-23 13:29
施俊 发表于 2012-3-23 13:01
要做的不是使用StringBuffer方法,就是自己写个反转的方法,老毕用转成数组的方式实现的,能不能不用而直 ...

如果不将字符串转成字符数组,就无法对这个字符串进行操作。replace只是简单的替代。实现不了你要的结果
作者: 周建    时间: 2012-3-23 13:30
你把replace理解错了,它不能实现交换未知的功能,只能将字符串第一个值改为第二个值,可用以下代码:
public String fanZ(String s)
        {
                char[] ch= s.toCharArray();
                int start=0,end=ch.length-1;
                while (start<end)
                {
                        char temp = ch[end];
                        ch[end] = ch[start];
                        ch[start] = temp;
                        start++;
                        end--;
                }
                String s1 = new String(ch);
                return s1;
        }
作者: 李涛涛    时间: 2012-3-23 13:42
public String fanZ(String s)
        {
                                String line = "";
                               
                                for(int i = s.length()-1;i>=0;i--){
                                        System.out.println(s.charAt(i));
                                        line +=s.charAt(i);
                                }
                                return line;
        }
这个代码可以满足你的需要,没有用数组
作者: 施俊    时间: 2012-3-23 14:53
李涛涛 发表于 2012-3-23 13:42
public String fanZ(String s)
        {
                                String line = "";

了解了,非常感谢。

作者: 杨华威    时间: 2012-3-23 14:57
s1 = s.replace(s.charAt(start),s.charAt(end));

replace只是替换两个位置的内容!肯定不能翻转字符串。




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