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

How to print String buffer lines from last to first order

我需要打印字符串缓冲行作为最后到第一个顺序。

示例: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 是最终的 class,因此您不能扩展它并覆盖其 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 本身并不能return 按照您想要的方式排列行。您可以从缓冲区中获取整个字符串并使用 string.split("\n") 将其拆分为一个数组,然后您可以从后向前迭代,或者创建一个 class自己提供了一个函数来处理这样的操作

这应该可以做到:

    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 或 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 更好。