java string.trim方法实现细节 公共字符串修剪(){ int len=value.length; int st=0; char[]val=value;/*避免getfield操作码*/ 而((st0平均起始位置不是0,len

java string.trim方法实现细节 公共字符串修剪(){ int len=value.length; int st=0; char[]val=value;/*避免getfield操作码*/ 而((st0平均起始位置不是0,len,java,Java,编辑 如果您的第一个问题是关于为什么不检查val[st]=',答案是:这是因为trim不仅删除了空格,还删除了新行和制表符。事实上,它删除了许多不可打印的字符,如'\b'(打印时发出声音的字符)。所有这些字符的代码都小于32(空格代码)。trim()在字符串的开头或结尾去除空格和控制字符 当你做1)'甚至不是一个可能的字符。假设这是一个打字错误,你的意思是问为什么,我想OP的意思是'而不是'@PeterLawrey,我会扩展我的答案来涵盖这一点。为什么val[st]@zzcrontoby是因为你

编辑

如果您的第一个问题是关于为什么不检查
val[st]='
,答案是:这是因为
trim
不仅删除了空格,还删除了新行和制表符。事实上,它删除了许多不可打印的字符,如'\b'(打印时发出声音的字符)。所有这些字符的代码都小于32(空格代码)。

trim()
在字符串的开头或结尾去除空格和控制字符


当你做
1)
'
甚至不是一个可能的字符。假设这是一个打字错误,你的意思是问为什么
,我想OP的意思是
'
而不是
'
@PeterLawrey,我会扩展我的答案来涵盖这一点。为什么val[st]@zzcrontoby是因为你不仅要修剪空格,还要修剪其他空格字符(例如换行符、制表符、回车符…)非常感谢。我在见到你之后已经理解了。我应该学习更多关于ASCII和其他基本概念。“过滤小于空格的值”第一个问题很好,但第二个问题似乎只是关于理解这里的语法或逻辑——为了理解这一点,你最好查阅教科书,或者进行一些调试;或者,你应该澄清你到底不理解什么(并将其分为两个问题)。非常感谢。我是在调试后才理解的。非常感谢。我在看到您的commond后已经理解了。非常感谢。我在看到您的commond后已经理解了。我应该学习更多有关ASCII和其他基本概念的知识。@zzcrontoby我的第一语言是机器语言,所以我必须记住ASCII表,很高兴您没有;)。
public String trim() {
    int len = value.length;
    int st = 0;
    char[] val = value;    /* avoid getfield opcode */

    while ((st < len) && (val[st] <= ' ')) {
        st++;
    }
    while ((st < len) && (val[len - 1] <= ' ')) {
        len--;
    }
    return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
}
return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
    return ((beginIndex == 0) && (endIndex == value.length)) ? this
            : new String(value, beginIndex, subLen);