Stringbuilder无法追加空格?

Raj*_*Raj 1 java stringbuilder

import java.util.StringTokenizer;

public class ReverseWords {
    public static void main(String[] args) {
        StringBuilder output = new StringBuilder();
        String str = "This is String , split by StringTokenizer, created by mkyong";
        StringTokenizer st = new StringTokenizer(str);
                char space =' ';
        System.out.println("---- Split by space ------");
        while (st.hasMoreElements()) {
            //System.out.println(st.nextElement());
                     output.insert(0,st.nextElement());
                     output.append(" ");
        }

        System.out.println(output.toString());
        /*System.out.println("---- Split by comma ',' ------");
        StringTokenizer st2 = new StringTokenizer(str, ",");

        while (st2.hasMoreElements()) {
            System.out.println(st2.nextElement());
        }*/
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图反转一个字符串的单词,这是我得到的:

mkyongbycreatedStringTokenizer,bysplit,StringisThis
Run Code Online (Sandbox Code Playgroud)

Ste*_*ein 7

您将部件插入前部,但最后插入所有空间.

你可以做这样的事情来解决这个问题:

String s = st.nextElement();
output.insert(0, s);
output.insert(s.length(), " ");
Run Code Online (Sandbox Code Playgroud)

请注意,这是非常低效的,因为所有累积的内容都会一直向后移动.

你需要使用字符串标记器吗?否则,你可以写

String[] parts = str.split(" ");
StringBuilder sb = new StringBuilder();
for (int i = parts.length - 1; i >= 0; i--) {
  sb.append(parts[i]);
  sb.append(' ');
}
Run Code Online (Sandbox Code Playgroud)