黑马程序员技术交流社区

标题: 请问这个代码错在哪了? [打印本页]

作者: 张金龙    时间: 2015-3-23 14:33
标题: 请问这个代码错在哪了?
关于去除字符串两端空格的代码。我没用老师的方法,我想知道这个代码为什么错?谢谢回答!
public class StringTest {
        public static void main(String[]args){
                String str ="   kk jkl   ";
                System.out.println(str);
                str = myTrim(str);
                System.out.println(str);
        }
        public static String myTrim(String str){
                int start = 0,end = str.length()-1;
                while(start<=end&&str.startsWith(' '))
                        start++;
                while(start<=end&&str.endsWith(' '))
                        end--;
                return str.substring(start,end+1);
        }
}
作者: 温大帅    时间: 2015-3-23 16:55
本帖最后由 温大帅 于 2015-3-23 17:11 编辑

你的两个while循环,每个都会循环都会村换str.length()次,因为的的条件一直都满足,我不知道老师的方法是怎么写的,我改了下你的,你看看行不行

  1. public static void main(String[] args)
  2. {
  3.     String str ="    kk jkl   ";
  4.     System.out.println(str);
  5.     str = myTrim(str);
  6.     System.out.println(str);
  7. }
  8. public static String myTrim(String str){
  9.     int start = 0,end = str.length()-1;
  10. while(start<=end&&str.startsWith(" "))
  11.        str=str.substring(1,(end--)+1);
  12.   while(start<=end&&str.endsWith(" "))
  13.      str=str.substring(0,(end--)-1);
  14.     return str;
  15. }
复制代码

作者: 殷俊    时间: 2015-3-23 16:59
你判断的总是原字符串,所以直到两端索引相等时,判断出来的还是true,输出为空
作者: 温大帅    时间: 2015-3-23 17:02
温大帅 发表于 2015-3-23 16:55
你的两个while循环,每个都会循环都会村换str.length()次,因为的的条件一直都满足,我不知道老师的方法是 ...

补充一句,刚刚测试了一下任何字符串调用startsWith(""),和endsWith(""),都返回true,因此上面的代码while中的判断条件写成startsWith(""),是不合适的,而且还可能出现超出索引的异常
作者: 桂何钢    时间: 2015-3-23 18:31
public class DeleteSpace {
        public static void main(String[]args){
                String str ="   kk jkl   ";
                System.out.println(str);
                str = myTrim(str);
                System.out.print(str);
                System.out.print("!");        //判断后面的空格是否去掉
        }
        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);
        }
}
你的while判定条件有问题,start++与str.startsWith(" ")无关,所以会出角标越界异常。我修改的可以了,你试试。
作者: 张金龙    时间: 2015-3-23 21:06
温大帅 发表于 2015-3-23 17:02
补充一句,刚刚测试了一下任何字符串调用startsWith(""),和endsWith(""),都返回true,因此上面的代码whi ...

谢谢你的回答。我明白了。
作者: 张金龙    时间: 2015-3-23 21:07
殷俊 发表于 2015-3-23 16:59
你判断的总是原字符串,所以直到两端索引相等时,判断出来的还是true,输出为空 ...

谢谢你的回答。我明白了。
作者: 邓士林    时间: 2015-3-23 21:18
懂了就好,,
作者: qq563426478    时间: 2015-3-23 21:25
我也是学到了




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