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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.模拟一个trim方法,去除字符串两端的空格。
     思路:
          1.判断字符串第一个位置是否是空格,如果是继续向下判断,直到不是空格为止。结尾处判断空格也是如此。
          2.当开始和结尾都判断到不是空格时,就是要获取的字符串。
  1. public class String1 {
  2.         public static void main(String[] args) {
  3.                 String s = "    hello java    ";
  4.                 String s1 = trimImitate(s);
  5.                 System.out.println(s1);
  6.         }

  7.         public static String trimImitate(String s) {
  8.                 int start = 0;
  9.                 int end = 0;
  10.                 for (int x = 0; x < s.length(); x++) {
  11.                         if (" ".equals(s.charAt(x))) {
  12.                                 start = x;
  13.                         } else {
  14.                                 break;
  15.                         }
  16.                 }
  17.                 for (int y = s.length() - 1; y >= 0; y--) {
  18.                         if (" ".equals(s.charAt(y))) {
  19.                                 end = y;
  20.                         } else {
  21.                                 break;
  22.                         }
  23.                 }
  24.                 return s.substring(start, end);
  25.         }
  26. }
复制代码
上面那段代码,思路没有任何问题,但就是截不出子串,看了好久搞清思路,明白了能对基本类型,String类,equals方法有个清晰的认识,分享一下。问题究竟在哪?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

8 个回复

倒序浏览
本帖最后由 张世钦 于 2013-3-18 17:58 编辑

首先,s.charAt();的返回数据类型是char,你用String跟他equals是没用的,直接break;
还有:char是基本数据类型,没有equals方法,你必须用它的包装类Character
更改后的代码如下,希望对你有帮助

  1. public static String trimImitate(String s) {
  2.                 int start = 0;
  3.                 int end = 0;
  4.                 Character ch = ' ';//用包装类定义空格
  5.                 for (int x = 0; x < s.length(); x++) {
  6.                         if (ch.equals(s.charAt(x))) {//用包装类去equals
  7.                                 start = x+1;//x只是记录了空格的位置,从有效位开始取要+1
  8.                         } else{
  9.                                 break;
  10.                         }
  11.                 }
  12.                 for (int y = s.length() - 1; y >= 0; y--) {
  13.                         if (ch.equals(s.charAt(y))) {//用包装类去equals
  14.                                 end = y;    //substring是包含头不包含尾,所有这里的end不用处理,直接会取到前面的有效位
  15.                         } else {
  16.                                 break;
  17.                         }
  18.                 }
  19.                 return s.substring(start, end);
  20.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
张世钦 发表于 2013-3-18 17:56
首先,s.charAt();的返回数据类型是char,你用String跟他equals是没用的,直接break;
还有:char是基本数据类型 ...

说的很对,我拿出来分享下的
回复 使用道具 举报
傅宇 发表于 2013-3-18 17:59
说的很对,我拿出来分享下的

:L我还以为是你不会....
回复 使用道具 举报
张世钦 发表于 2013-3-18 17:56
首先,s.charAt();的返回数据类型是char,你用String跟他equals是没用的,直接break;
还有:char是基本数据类型 ...

其实没那么麻烦,不用包装类还是能有很多方法解决的,方法1:if (" " .equals( s.charAt (x)+ ""));方法2:if (' ' ==  s.charAt (y))。
回复 使用道具 举报
傅宇 发表于 2013-3-18 18:01
其实没那么麻烦,不用包装类还是能有很多方法解决的,方法1:if (" " .equals( s.charAt (x)+ ""));方法 ...

我当成你不会,所以分开来解释了..呵呵
回复 使用道具 举报
傅宇 中级黑马 2013-3-18 18:03:11
7#
张世钦 发表于 2013-3-18 18:00
我还以为是你不会....

我就为了空闲时候赚点技术分的
回复 使用道具 举报
傅宇 中级黑马 2013-3-18 18:05:41
8#
方法三:" ".equals(String.valueOf(s.charAt(x)))
回复 使用道具 举报
曾钦 中级黑马 2013-3-18 18:16:29
9#
  1. public class String1 {
  2.         public static void main(String[] args) {
  3.                 String s = "    hello java    ";
  4.                 String s1 = trimImitate(s);
  5.                 System.out.println(s1);
  6.         }

  7.         public static String trimImitate(String s) {
  8.                 int start = 0;
  9.                 int end = 0;
  10.                 for (int x = 0; x < s.length(); x++) {
  11.                         if (' '==s.charAt(x)) {
  12.                                 start = x;
  13.                         } else {
  14.                                 break;
  15.                         }
  16. //                System.out.print(s.charAt(x));
  17.                 }
  18.                 for (int y = s.length() - 1; y >= 0; y--) {
  19.                         if (' '==s.charAt(y)) {
  20.                                 end = y;
  21.                         } else {
  22.                                 break;
  23.                         }
  24. //                        System.out.print(s.charAt(y));
  25.                 }
  26.                 return s.substring(start, end);
  27.         }
  28. }
复制代码
代码如上,用string去equals char 是肯定挂的。。

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马