我要求打印字符串缓冲行作为第一顺序的最后一行。
示例:Stringbuffer方法的toString在输出下方打印:
this
is
some
text
期望的输出:
text
some
is
this
答案 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更好。