如何从最后到第一个顺序打印字符串缓冲区行
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 更好。
我需要打印字符串缓冲行作为最后到第一个顺序。
示例: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 更好。