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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张金龙 中级黑马   /  2015-3-23 14:33  /  1387 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

关于去除字符串两端空格的代码。我没用老师的方法,我想知道这个代码为什么错?谢谢回答!
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);
        }
}

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

8 个回复

倒序浏览
本帖最后由 温大帅 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

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

补充一句,刚刚测试了一下任何字符串调用startsWith(""),和endsWith(""),都返回true,因此上面的代码while中的判断条件写成startsWith(""),是不合适的,而且还可能出现超出索引的异常

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
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 17:02
补充一句,刚刚测试了一下任何字符串调用startsWith(""),和endsWith(""),都返回true,因此上面的代码whi ...

谢谢你的回答。我明白了。
回复 使用道具 举报
殷俊 发表于 2015-3-23 16:59
你判断的总是原字符串,所以直到两端索引相等时,判断出来的还是true,输出为空 ...

谢谢你的回答。我明白了。
回复 使用道具 举报
懂了就好,,
回复 使用道具 举报
我也是学到了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马