黑马程序员技术交流社区

标题: 怎么出现这种情况 [打印本页]

作者: 王贵朝    时间: 2012-9-25 10:26
标题: 怎么出现这种情况
本帖最后由 王贵朝 于 2012-9-25 10:54 编辑

class MyTrim
{
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
        public static void main(String[] args)
        {
                String str = "  dsfa   ";
                sop(str);
                String s = myTrim(str);
                sop(s);
        
        
        
        }
        //去掉字符串两端的空格
        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--;
                String s = str.substring(start,end-1);
                return s;
        }

}



11.png (1019 Bytes, 下载次数: 26)

11

11

作者: 皮卫凯    时间: 2012-9-25 10:39
     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--;
                String s = str.substring(start,end-1);  / / 应该是这样 String s = str.substring(start,end+1);  
                return s;
        }
作者: 明光照    时间: 2012-9-25 10:43
首先string有一个方法,trim()可以除去两边的空格 。
就你这个问题看,打印出end 和start 的值分别为5和2,
再最后有一个end--,end的实际值就变成了4,substring()是从start开始到end-1结束的。看一下api。
也就是说你的substring()是这样的substring(2,4),当然打印出来的就是ds了
作者: 汪小照    时间: 2012-9-25 10:44
class MyTrim
{
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
        public static void main(String[] args)
        {
                String str = "  dsfa   ";
                sop(str);
                String s = myTrim(str);
                sop(s);
        
        
        
        }
        //去掉字符串两端的空格
        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--;
                String s = str.substring(start,end+1);//这个地方应改为end+1
                                                 //原因是subString在截取字符串时是不包括end的,而在while语句
             //条件不满足时,此时end的位置在a字符上,然后在end-1时,在截取
             //的时候就截取了ds。
                return s;s
        }
}

1.jpg (3.55 KB, 下载次数: 31)

运行结果

运行结果

作者: 王贵朝    时间: 2012-9-25 10:52
谢谢各位,明白了,因为第一次的时候length()没-1,导致end也写成-1了。。




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