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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 施俊 中级黑马   /  2012-3-23 12:34  /  2848 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

自己编码字符串反转,用到了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. }
复制代码

12 个回复

倒序浏览
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());
        }

}
回复 使用道具 举报
liumeng 发表于 2012-3-23 12:46
public class StringReverse {

        /**

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

class Fanzhuan
{
        public String fanZ(String s)
        {
                StringBuilder sb = new StringBuilder(s);
                return sb.reverse().toString();
        }
}
回复 使用道具 举报
String replace(char oldChar, char newChar)
          返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
回复 使用道具 举报
李成 中级黑马 2012-3-23 13:17:11
7#
s.replace(s.charAt(start),s.charAt(end))中的replace方法不会对s进行修改,每次都返回只对两个字符进行替换后的新的字符串。
回复 使用道具 举报
  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:01
要做的不是使用StringBuffer方法,就是自己写个反转的方法,老毕用转成数组的方式实现的,能不能不用而直 ...

如果不将字符串转成字符数组,就无法对这个字符串进行操作。replace只是简单的替代。实现不了你要的结果
回复 使用道具 举报
周建 黑马帝 2012-3-23 13:30:11
10#
你把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;
        }
回复 使用道具 举报
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 13:42
public String fanZ(String s)
        {
                                String line = "";

了解了,非常感谢。
回复 使用道具 举报
s1 = s.replace(s.charAt(start),s.charAt(end));

replace只是替换两个位置的内容!肯定不能翻转字符串。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马