Stringbuilder无法追加空格?

时间:2015-01-07 00:30:40

标签: 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());
        }*/
    }
}

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

mkyongbycreatedStringTokenizer,bysplit,StringisThis

2 个答案:

答案 0 :(得分:7)

您正在将部件插入前部,但最后插入所有空间。

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

String s = st.nextElement();
output.insert(0, s);
output.insert(s.length(), " ");

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

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

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

答案 1 :(得分:0)

另一个解决方案:改变这个:

output.insert(0,st.nextElement());
output.append(" ");

到此:

output.insert(0,st.nextElement() + " ");

这使得空格字符成为您在前面插入的字符串的一部分;原始代码在末尾附加了空格,使其与nextElement()返回的字符串分开。