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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class StringTest
{
        public static void sop(String str)
        {
                System.out.println(str);
        }
        public static void main(String[] args)
        {
                String s= "         ad cd       ";
                sop("("+s+")");
                s=MyTrim(s);
                sop("("+s+")");
        }
        //练习一:去除字符两端空格的功能
        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+1);
        }
}


我的问题是,代码好像什么都没做啊,while循环是条件里面的循环,跟主函数好像没什么联系,他是怎 去掉空格的?

4 个回复

正序浏览
以下代码是源码:
/**
     * Copies this string removing white space characters from the beginning and
     * end of the string.
     *
     * @return a new string with characters <code><= \\u0020</code> removed from
     *         the beginning and the end.
     */
    public String trim() {
        int start = offset, last = offset + count - 1;
        int end = last;
        while ((start <= end) && (value[start] <= ' ')) {
            start++;
        }
        while ((end >= start) && (value[end] <= ' ')) {
            end--;
        }
        if (start == offset && end == last) {
            return this;
        }
        return new String(start, end - start + 1, value);
    }
回复 使用道具 举报
start记录从左边起第一个非空格字符的下标,初始值是最左边(首位),即0
end记录从右边起第一个非空格字符的下标,初始值是最右边(末位),即str.length()-1
所以start从0起,逐次向右移动判断当前字符是否空格,如果是空格,继续往前,直到遇到第一个非空格字符,记录其下标。end同理。
回复 使用道具 举报
本帖最后由 曾晓文 于 2012-4-10 20:51 编辑

sop("("+s+")");因为字符串是不可变的,在字符串s前面和尾部加上了 ‘(’和‘)’,就拼接出来另一个String对象"(         ad cd       )", 把该对象的地址传入sop方法,而不是传入原来 s 的地址原,所以字符串s得不到 sop 方法处理,而是处理了临时创建的字符串"(         ad cd       )"。不是你的sop方法有问题,而是你传字符串对象是出错了。
回复 使用道具 举报
  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+1);  ----------->通过字符串截取功能,从老字符串的第start位置开始到底end+1位置结束(因为截取字符串包含头不包含尾,所以end+1),并返回这个新的字符串。
        }

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

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