3

请考虑以下代码:

public class SentenceReversal {

    /**
     * @param args
     */
    public static void main(String[] args) {


        String[] parts = "This is an interview Question".split("\\b");
        StringBuilder sb = new StringBuilder();
        for (int i = parts.length; i --> 0 ;) {
            sb.append(parts[i]);
        }
        System.out.println("[" + sb.toString() + "]");

}
}

"\b" 在 split 函数中做了什么?删除它会产生以下结果(这意味着只使用 split("")):

[noitseuQ weivretni na si sihT]

另外,`-->' 运算符在 for 循环中做了什么?我不太明白。请帮助我理解我的问题。

谢谢

4

1 回答 1

6

String.split()根据正则表达式拆分字符串。

\b是一个正则表达式,表示单词边界,即行首、行尾、空格、标点符号等。它的传递是\\b因为 Java 需要\用另一个\.

当您使用 split() 时,""您基本上没有进行任何拆分,因此输入字符串被分解为数组中的单个字母,然后反向迭代,因此您得到一个字符串,其所有字母(而不是单词)都颠倒了。

只是为了详细说明@LuiggiMendoza 的观察

i --> 0 // gets interpreted as
i-- > 0 // i.e. it uses a post-fix decrement operator

这意味着 的值首先i被匹配0,然后i = i - 1发生。

另外,请注意使用StringBuilder代替StringBuffer(线程安全但速度慢)或普通连接(会在 Java字符串池中String创建太多不必要的字符串)。

于 2013-05-21T05:03:03.643 回答