黑马程序员技术交流社区

标题: 自己写的方法实现String的trim()功能,测试功能是遇到的问题 [打印本页]

作者: 寇龙飞    时间: 2012-8-28 20:56
标题: 自己写的方法实现String的trim()功能,测试功能是遇到的问题
本帖最后由 寇龙飞 于 2012-8-29 02:57 编辑

截图中红框,打印结果很奇怪。求解。
还有,大家帮我看看我的myTrim()方法有没有其他问题,哪里需要优化?
  1. package com.itheima.bixiangdong;


  2. public class TrimDemo {
  3.         
  4.         public static void main(String[] args) {
  5.                
  6.                 show(myTrim.trim(        null                                  )+'|');
  7.                 show(myTrim.trim(        ""                                          )+'|');
  8.                 show(myTrim.trim(        "                        "                  )+'|');
  9.                 show(myTrim.trim(        "  abcd     "                  )+'|');
  10.                 show(myTrim.trim(        "  ab c     "                  )+'|');
  11.                 show(myTrim.trim(        "abcdefghijk"                  )+'|');
  12.                 //show(                                        null                        .trim()+'|');
  13.                 show(                                        ""                                .trim()+'|');
  14.                 show(                                        "           "        .trim()+'|');
  15.                 show(                                        "  abcd                "        .trim()+'|');
  16.                 show(                                        "  ab c          "        .trim()+'|');
  17.                 show(                                        "abcdefghijk"        .trim()+'|');
  18.         }

  19.         public static final void show(Object obj) {
  20.                 System.out.println(obj);
  21.         }
  22. }

  23. class myTrim {
  24.         
  25.                                                 //去除字符串前后端空格
  26.         public static String trim(String str) {
  27.                
  28.                 if(str==null || str.isEmpty())//||而不是|,避免NullPointerException
  29.                         return str;
  30.                
  31.                 int pos_pre = 0;        
  32.                 while(str.charAt(pos_pre) == ' ') {
  33.                         pos_pre++;//str.length()角标
  34.                         if(pos_pre == str.length())//避免2处角标越界异常
  35.                                 return "";
  36.                 }
  37.                
  38.                 int pos_end = str.length();
  39.                 while(str.charAt(pos_end-1) == ' ') {
  40.                         pos_end--;//-1角标
  41.                 }
  42.                
  43.                 return str.substring(pos_pre, pos_end);        
  44.         }
  45. }
复制代码
打印结果令人费解:
null|
|
                        |
abcd|
ab c|
abcdefghijk|
|
|
abcd|
ab c|
abcdefghijk|


(想法截图呢,被网速打败了,只能复制打印结果了。)

深夜网速好,我来上图。

QQ截图20120828204941.png (10.87 KB, 下载次数: 11)

QQ截图20120828204941.png

作者: 唐志兵    时间: 2012-8-28 22:09
本帖最后由 唐志兵 于 2012-8-28 22:27 编辑

我看看。。。
  1. public class TrimDemo {

  2.         
  3.         public static void main(String[] args) {
  4.                 show(myTrim.trim(        null                                  )+'|');   //java中null可以当做字符串进行传递,以前没发现,现在才发现的。

  5.                 show(myTrim.trim(        ""                                          )+'|');   // "" + | 肯定 输出 |了。

  6.                 show(myTrim.trim(        "                        "                  )+'|'); //一大串的空格,被 trim函数处理掉了。就剩下后面的一个竖线。

  7.                 show(myTrim.trim(        "  abcd     "                  )+'|'); //同理, abcd 前后的空格被 trim函数处理掉,输出 abcd|

  8.                 show(myTrim.trim(        "  ab c     "                  )+'|');  // "  ab c     "  前后的空格被处理掉, 输出 ab c| ,这里中间的空格是不会被处理的

  9.                 show(myTrim.trim(        "abcdefghijk"                  )+'|');   //输出 abcdefghijk|


  10.                 show(                                        ""                                .trim()+'|'); // 输出 |线

  11.                 show(                                        "           "        .trim()+'|');   

  12.                 show(                                        "  abcd                "        .trim()+'|');

  13.                 show(                                        "  ab c          "        .trim()+'|');

  14.                 show(                                        "abcdefghijk"        .trim()+'|');

  15.         }

  16.         
  17.         public static final void show(Object obj) {

  18.                 System.out.println(obj);

  19.         }

  20. }


  21. class myTrim {

  22.         
  23.                                                 //去除字符串前后端空格

  24.         public static String trim(String str) {

  25.                
  26.                 if(str==null || str.isEmpty())//||而不是|,避免NullPointerException

  27.                         return str;

  28.                
  29.                 int pos_pre = 0;        
  30.                 while(str.charAt(pos_pre) == ' ') {

  31.                         pos_pre++;//str.length()角标

  32.                         if(pos_pre == str.length())//避免2处角标越界异常

  33.                                 return "";

  34.                 }

  35.                
  36.                 int pos_end = str.length();

  37.                 while(str.charAt(pos_end-1) == ' ') {

  38.                         pos_end--;//-1角标

  39.                 }

  40.                
  41.                 return str.substring(pos_pre, pos_end);        
  42.         }

  43. }
复制代码
剩下的都是那个道理了。。





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