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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋文轩 黑马帝   /  2011-11-10 16:15  /  3746 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 宋文轩 于 2011-11-10 16:40 编辑

请教 String类中的trim()方法可以去除回车符吗?谢谢大家。

6 个回复

倒序浏览
自己顶一下,有人解答一下吗?
回复 使用道具 举报
咖啡 黑马帝 2011-11-10 23:14:58
藤椅
String.Trim()方法会去除字符串两端,不仅仅是空格字符,它总共能去除25种字符:
('/t', '/n', '/v', '/f', '/r', ' ', '/x0085', '/x00a0', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '?', '/u2028', '/u2029', ' ', '?')

评分

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

查看全部评分

回复 使用道具 举报
API文档中很具体的。
public String trim()返回字符串的副本,忽略前导空白和尾部空白。
如果此 String 对象表示一个空字符序列,或者此 String 对象表示的字符序列的第一个和最后一个字符的代码都大于 '\u0020'(空格字符),则返回对此 String 对象的引用。

否则,若字符串中没有代码大于 '\u0020' 的字符,则创建并返回一个表示空字符串的新 String 对象。

否则,假定 k 为字符串中代码大于 '\u0020' 的第一个字符的索引,m 为字符串中代码大于 '\u0020' 的最后一个字符的索引。创建一个新的 String 对象,它表示此字符串中从索引 k 处的字符开始,到索引 m 处的字符结束的子字符串,即 this.substring(k, m+1) 的结果。

此方法可用于截去字符串开头和末尾的空白(如上所述)。


返回:
此字符串移除了前导和尾部空白的副本;如果没有前导和尾部空白,则返回此字符串。

评分

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

查看全部评分

回复 使用道具 举报
绿影 黑马帝 2011-11-11 01:21:19
报纸
他实现的方式就是由于String底部是char数组则设定两个采用两个计数器st、len,初始值st=0,len=String.length(),然后从这个char数组两边依次分别拿出每个字符跟' '比较,只要小于或者等于它,就将st加1,len减1,知道不符合条件。说明已经将空格字符去掉完毕。下面是String中trim的源码,
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence
{
    private final char value[];  
    private final int offset;  
    private final int count;
    private int hash; // Default to 0
  
  public String(char value[]) {
        int size = value.length;
        this.offset = 0;
        this.count = size;
        this.value = Arrays.copyOf(value, size);
    }
       
        public String trim() {
        int len = count;
        int st = 0;
        int off = offset;      /* avoid getfield opcode */
        char[] val = value;    /* avoid getfield opcode */

        while ((st < len) && (val[off + st] <= ' ')) {
            st++;
        }
        while ((st < len) && (val[off + len - 1] <= ' ')) {
            len--;
        }
        return ((st > 0) || (len < count)) ? substring(st, len) : this;
}
}

只是,小于' '还有那些char我搞清楚了给你补充!我还没弄明白。因为说明trim方法不仅仅可以去掉我们平常说的空格,还可以去掉编码值小于' '的编码值的字符。

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 郭学文 于 2011-11-11 02:13 编辑

可以

你可以测试一下
trim一共可以去掉这些字符:
  1. for (int i = 0; i <=32; i++) {
  2.                         System.out.print((char)i);
  3.                 }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
郭学文 黑马帝 2011-11-11 02:18:26
7#
  1. ArrayList<Character> cccArrayList= new ArrayList<Character>();
  2.                 for (int i = 0; i <=32; i++) {
  3.                         cccArrayList.add((char)i);
  4.                 }
  5.                 System.out.println(cccArrayList.contains('\r'));
  6.                 System.out.println(cccArrayList.contains('\n'));
复制代码
结果都为true
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马