我有要求將字符串緩衝行打印爲最後到第一張訂單。如何從最後到第一張訂單打印字符串緩衝行
例如:StringBuffer的方法的toString在打印輸出如下:
this
is
some
text
所需的輸出:
text
some
is
this
我有要求將字符串緩衝行打印爲最後到第一張訂單。如何從最後到第一張訂單打印字符串緩衝行
例如:StringBuffer的方法的toString在打印輸出如下:
this
is
some
text
所需的輸出:
text
some
is
this
你可以做的是創造一個數組,遍歷它。
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);
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
希望幫助
的StringBuffer沒有,其本身必須返回的能力線條就像你想要的那樣。您可以從緩衝區獲取整個字符串,然後使用string.split(「\ n」)將其分割爲一個數組,然後您可以將它迭代回去,或者創建一個自己的類來提供一個函數,處理這樣的操作
這也許應該這樣做:
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]);
}
的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更好。
StringBuffer不是面向行的。你必須用換行符分割,然後反過來遍歷結果字符串數組。 –