【问题标题】:Stringbuilder cannot append white space?Stringbuilder 不能追加空格?
【发布时间】:2015-01-07 00:30:40
【问题描述】:
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

【问题讨论】:

    标签: java stringbuilder


    【解决方案1】:

    您将在前面插入零件,但在末尾插入所有空间。

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

    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(' ');
    }
    

    【讨论】:

    • 或者使用更简洁的方法,将所有标记压入堆栈,然后将它们弹出到输出字符串中。
    • output.insert(0, " "); output.insert(0, st.nextElement()); 也可以。但我不知道哪个更“干净”。
    • 字符串 s = st.nextElement();output.insert(0, " "); output.insert(0, st.nextElement());不工作。这给我留下了分裂。
    • @Raj 你调用 st.nextElement() 两次。这将跳过一些部分。改用 output.insert(0, s)
    【解决方案2】:

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

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

    到这里:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 2017-01-02
      • 2019-03-06
      • 1970-01-01
      相关资源
      最近更新 更多