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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 游兴钟 中级黑马   /  2012-4-17 18:53  /  2407 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class StringPractice
{
        public static void main(String[] args)
        {
                String str ="  dsfdsf gg   ";
                String s1 =myTrim(str);
                sop("["+s1+"]");
        }
        public static String myTrim(String s)
        {
                int begin =0;
                int end =s.length()-1;
                char ch1= s.charAt(begin);
                char ch2= s.charAt(end);
                while(begin<=end &&ch1==' ')
                        begin++;
                while(begin<=end &&ch2==' ')
                        end--;
                return s.substring(begin,end+1);
        }
       
        public static void sop(Object str)
        {
                System.out.println(str);
        }
       
}


public static String myTrim(String str)
        {
                int start = 0,end = str.length()-1;

                while(start<=end && str.charAt(start)==' ')
                        start++;

                while(start<=end && str.charAt(end)==' ')
                        end--;

                return str.substring(start,end+1);
        }
myTrim方法的这两种写法区别在哪?为什么得出的结果差别这么大。。

4 个回复

倒序浏览
如果你说的是第一个方法为什么得到的结果不是trim方式的,原因在于你的第一个方法里,ch   2个并没有变化,ch1和ch2一直都是空格,所以根据你的表达式,表达式永远成立,最后得到的begin是14,end是13,而你的return s.substring(begin,end+1);这句,实际上是return s.substring(14,13+1);
  1. public static String myTrim(String s)
  2.         {
  3.                 int begin =0;
  4.                 int end =s.length()-1;
  5.                 char ch1= s.charAt(begin);
  6.                 char ch2= s.charAt(end);
  7.                 while(begin<=end &&ch1==' ')
  8.                 {
  9.                         begin++;
  10.                         ch1= s.charAt(begin);
  11.                 }
  12.                 while(begin<=end &&ch2==' ')
  13.                 {
  14.                         end--;
  15.                         ch2= s.charAt(end);
  16.                 }
  17.                 return s.substring(begin,end+1);
  18.         }
复制代码

点评

不要跟我们分数不够的抢分了,55555  发表于 2012-4-17 20:51
回复 使用道具 举报
    int start = 0,end = str.length()-1;

end 没有申明其类型!
    int begin =0;
                 int end =s.length()-1;
                 char ch1= s.charAt(begin);
                 char ch2= s.charAt(end);
                 while(begin<=end &&ch1==' ')
                         begin++;
                 while(begin<=end &&ch2==' ')
                         end--;
                 return s.substring(begin,end+1);
ch1 和ch2值的表达式不是循环的条件,因此他们的值并不会随着 begin和end的变化而变化!

点评

int start = 0,end = str.length()-1;这种属于缩写,同时声明n个相同类型的变量 ch1 ch2是表达式的一部分,只不过没有进行赋值改变,不符合逻辑而已  发表于 2012-4-17 20:32
回复 使用道具 举报
你的第一个mytrim方法里得ch1和ch2被赋值后就没有在改变,你的while循环没有改变ch1和ch2的值,所以begin会一直加,直到begin=end=s.length()-1,第二个while里的end会一直减,直到end=s.length()-2,所以最后你的begin=s.length()-1;end=s.length()-2;
这样到return语句时就出错了。
回复 使用道具 举报
在第一个myTrim(String s)方法中char ch1 = s.charAt(begin);char ch2 = s.charAt(end);没有在while()括号中,不参与循环。
在第二个myTrim(String str)方法中while (start <= end && str.charAt(start) == ' ');while (start <= end && str.charAt(end) == ' '),str.charAt(start) == ' '和str.charAt(end) == ' '都参与了循环,结果当然不一样了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马