2015-01-07 1 views
1
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()); 
     }*/ 
    } 
} 

Я пытаюсь просто поменять местами слова строки, и вот что я получаю:Stringbuilder не может добавить пробел?

mkyongbycreatedStringTokenizer,bysplit,StringisThis 

ответ

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

Или используйте метод очистки, который выталкивает все токены в стек, а затем выталкивает их в выходную строку. – chrylis

+0

'output.insert (0," "); output.insert (0, st.nextElement()); 'также будет работать. Но я не знаю, какой из них «чище». – Tom

+0

Строка s = st.nextElement(); output.insert (0, ""); output.insert (0, st.nextElement()); Не работает. Это оставляет меня с расколом. – Raj

0

Другое решение: Изменить это:

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

к этому:

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

Это делает пространство символов часть строки, вы вставляете в перед; исходный код добавлял пространство в конец, заставляя его отделяться от строки, возвращаемой nextElement().