2015-08-18 39 views
0

我有要求將字符串緩衝行打印爲最後到第一張訂單。如何從最後到第一張訂單打印字符串緩衝行

例如:StringBuffer的方法的toString在打印輸出如下:

this 
is 
some 
text 

所需的輸出:

text 
some 
is 
this 
+0

StringBuffer不是面向行的。你必須用換行符分割,然後反過來遍歷結果字符串數組。 –

回答

0

你可以做的是創造一個數組,遍歷它。

String s = new String("this\nis\nsome\ntext"); 
String []tokens = s.split("\n"); 
for(int i = tokens.length - 1; i >= 0; --i) 
    System.out.println(tokens[i]); 

StringBuffer s = new StringBuffer("this\nis\nsome\ntext"); 
    String []tokens = s.toString().split("\n"); 
    for(int i = tokens.length - 1; i >= 0; --i) 
     System.out.println(tokens[i]); 

更好的內存更少的辦法是。

StringBuffer s = new StringBuffer("this\nis\nsome\ntext"); 
     String word = ""; 
     for(int i = s.length() - 1; i >= 0; --i) 
     { 
      if(s.charAt(i) != '\n') 
      { 
       word = s.charAt(i) + word; 
      } 
      else{ 
       System.out.println(word); 
       word = ""; 
      } 
     } 
     if(!word.equals("")) 
      System.out.println(word); 
0

StringBuffer是一個final類,所以你不能擴展它並覆蓋它的toString()方法來實現你想要做的事情。你將不得不在你的代碼中處理它。

你將不得不做這樣的事情:

public class Reverse { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    StringBuffer s =new StringBuffer(); 
    s.append("this\nis\nsome\ntext"); 
    String[] rev = s.toString().split("\n"); 
    for(int i=rev.length-1;i>=0;i--) { 
     System.out.println(rev[i]); 
    } 

} 
} 

O/P:

text 
some 
is 
this 

希望幫助

0

的StringBuffer沒有,其本身必須返回的能力線條就像你想要的那樣。您可以從緩衝區獲取整個字符串,然後使用string.split(「\ n」)將其分割爲一個數組,然後您可以將它迭代回去,或者創建一個自己的類來提供一個函數,處理這樣的操作

0

這也許應該這樣做:

String[] lines = myStringBuffer.toString().split(System.lineSeparator()); //or use any other character for splitting  
    for(int i=lines.length; i>0; i--) { 
     System.out.println(lines[i-1]); 
    } 
0

的StringBuffer或字符串也有lastIndexOf。

StringBuffer buf = new StringBuffer("this\nis\nsome\ntext"); 
final String EOL = "\n"; // Or "\r\n" or even "\u0085". 
for (int pos = buf.length(); pos > 0;) { 
    int before = buf.lastIndexOf(EOL, pos); 
    before = before == -1 ? 0 : before + EOL.length(); 
    String line = buf.substring(before, pos); 
    System.out.println(buf); 
    pos = before - EOL.length(); 
} 

注意:StringBuilder更好。

相關問題