黑马程序员技术交流社区

标题: 小程序求解 [打印本页]

作者: 游兴钟    时间: 2012-4-17 18:53
标题: 小程序求解
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方法的这两种写法区别在哪?为什么得出的结果差别这么大。。
作者: 刘蕴学    时间: 2012-4-17 19:24
如果你说的是第一个方法为什么得到的结果不是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.         }
复制代码

作者: 黑马-刘昌文    时间: 2012-4-17 19:52
    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的变化而变化!
作者: 袁培育    时间: 2012-4-17 20:14
你的第一个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语句时就出错了。
作者: 韩新凯    时间: 2012-4-17 21:18
在第一个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) == ' '都参与了循环,结果当然不一样了。




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