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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 疲劳的小马 中级黑马   /  2014-2-26 17:04  /  950 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天学习视屏时,自己动手写了一个小程序,关于String字符串的,如下:
  1. /*
  2. 1,模拟一个trim()方法,去除字符串两端的空格
  3.         思路:
  4.         1.判断字符串两端的第一个位置是否为空格,如果是继续判断,直到不
  5. 是为止
  6.         2.如果两端都不是空格时就是要获取的字符串
  7. */
  8. class Demo
  9. {
  10.         public static void main(String[] args)
  11.         {
  12.                 String s="  abc def   ";
  13.                 int start=0,end=s.length()-1;
  14.                 for (int x=0;x<s.length();x++ )
  15.                 {
  16.                         if(s.charAt(x)!=' ')
  17.                         {
  18.                                 start=x;
  19.                                 break;       
  20.                         }
  21.                         else
  22.                                 System.out.println("字符串是长度为"+s.length()+"的空字符串");
  23.                 }

  24.                 for (int y=s.length()-1;y>start;y-- )
  25.                 {
  26.                         if(s.charAt(y)!=' ')
  27.                                 end=y;
  28.                 }

  29.                 String s1=s.substring(start,end);
  30.                 System.out.println("新字符串是:"+s1);
  31.         }
  32. }
复制代码

可是运行结果都不对,请大家帮我看下代码到底哪里错了,如何修改?
附上老毕的关于这题的讲解代码:
  1. class StringDemo1
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String s="    Hello java    ";
  6.                 sop(s);
  7.                 s=myTrim(s);
  8.                 sop(s);
  9.         }

  10.         public static String myTrim(String str)
  11.         {
  12.                 int start=0,end=str.length()-1;
  13.                 while(start<=end && str.charAt(start)==' ')
  14.                         start++;
  15.                 while(start<=end && str.charAt(end)==' ')
  16.                         end--;
  17.                 return str.substring(start,end+1);

  18.         }

  19.         public static void sop(String str)
  20.         {
  21.                 System.out.println(str);
  22.         }
  23. }
复制代码

请大神们指教小弟。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

5 个回复

倒序浏览
楼主思路想先去前面空字符 在减后面空字符  但是写的逻辑错了 我修改了下
class Demo
{
        public static void main(String[] args)
        {
                String s="  abc def   ";
                System.out.println("原字符串是:"+s);

                int start=0,end=s.length()-1;
                int i=0;
                while(i<s.length()){
                        if (s.charAt(i)!=' '){
                                start=i;break;
                        }
                        else{ ++i;};
                }
                i=s.length()-1;
                while(end>start){
                        if (s.charAt(i)!=' '){
                                end=i;break;
                        }
                        else{ --i;};
                }


               

                String s1=s.substring(start,end);
                System.out.println("新字符串是:"+s1);
        }
}
打印结果:原字符串是:  abc def   
               新字符串是:abc de

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
你的代码,第二个for循环,end=y之后,加上break,问题就在这里
回复 使用道具 举报
本帖最后由 疲劳的小马 于 2014-2-26 20:15 编辑
自由自在2014 发表于 2014-2-26 17:50
楼主思路想先去前面空字符 在减后面空字符  但是写的逻辑错了 我修改了下
class Demo
{

你的是对的,写法和毕老师的差不多,只是更容易看懂,但是你有个小问题,发现了么,就是结果少了个f,所以那一句应该是,substring(start,end+1)。我的逻辑没错,思想都差不多,我后来自己找到错误了,错在第二个for循环忘写了break。
回复 使用道具 举报
疲劳的小马 发表于 2014-2-26 20:10
你的是对的,写法和毕老师的差不多,只是更容易看懂。我的逻辑没错,思想都差不多,我后来自己找到错误了 ...

恩。我没看仔细
回复 使用道具 举报
我要的幸福呢 发表于 2014-2-26 18:02
你的代码,第二个for循环,end=y之后,加上break,问题就在这里

恩,你说的对的。是少加了个break,我后来自己也找到这个原因了,但是新问题又出来了,就是第一个for循环的else语句中的输出语句,多输出了很多次,break只能跳出当前循环,后来,我多次改了代码,终于改好了,一会发出来,大家再提提建议
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马