试图理解以下代码来反转句子

时间:2013-05-21 05:00:39

标签: java collections

请考虑以下代码:

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(“”)):

[noitseuQ weivretni na si sihT]

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

由于

1 个答案:

答案 0 :(得分:6)

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

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

当您使用""分割()时,你基本上就什么都没有分裂,因此输入字符串会被分解成一个数组中的单个字母,然后反向迭代,因此你得到一个包含所有字符串的字符串字母(而不是单词)颠倒过来。

仅详细说明@LuiggiMendoza的观察

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

表示i的值首先被合并到0,然后i = i - 1发生。

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