如何从最后到第一顺序打印字符串缓冲行

时间:2015-08-18 13:41:50

标签: java string stringbuilder stringbuffer

我要求打印字符串缓冲行作为第一顺序的最后一行。

示例:Stringbuffer方法的toString在输出下方打印:

this
is
some
text

期望的输出:

text
some
is
this

5 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

StringBuffer是一个最终类,因此您无法扩展它并覆盖其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

希望有所帮助

答案 2 :(得分:0)

StringBuffer本身不具备以您希望的方式返回行的能力。您可以从缓冲区中获取整个字符串,并使用string.split(“\ n”)将其拆分为一个数组,然后您可以将其迭代回到前面,或者创建一个自己的类,它提供了一个函数,处理这样的操作

答案 3 :(得分: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]);
    }

答案 4 :(得分:0)

StringBuffer或String也有一个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更好。