gpt4 book ai didi

java - 读取最后一个控制台输出并将其保存到变量/字符串中

转载 作者:行者123 更新时间:2023-12-01 11:35:29 25 4
gpt4 key购买 nike

我想从控制台读取最后的输出,然后将其保存到变量中。

假设我有以下代码和输出:

System.out.println("first");
System.out.println("second");
System.out.println("third");
...
**...THE CODE HERE...**

first

second

third

现在我希望它从控制台读取最后/最新输出并将其保存到变量/字符串中。

有什么想法吗?

最佳答案

这个任务很奇怪,但这里有一个快速而肮脏的解决方案:

import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.StringWriter;


public class FilterOutput {
static class MemorizingOutputStream extends FilterOutputStream {
StringWriter sw = new StringWriter();
String last = null;

public MemorizingOutputStream(OutputStream out) {
super(out);
}

@Override
public void write(int b) throws IOException {
write(new byte[] {(byte)b}, 0, 1);
}

@Override
public void write(byte[] b) throws IOException {
write(b, 0, b.length);
}

@Override
public void write(byte[] b, int off, int len) throws IOException {
out.write(b, off, len);
String s = new String(b, off, len);
int pos = s.lastIndexOf('\n');
if(pos == -1) {
sw.append(s);
} else {
int pos2 = s.lastIndexOf('\n', pos-1);
if(pos2 == -1) {
sw.append(s.substring(0, pos));
last = sw.toString();
} else {
last = s.substring(pos2+1, pos);
}
sw = new StringWriter();
sw.append(s.substring(pos+1));
}
}

public String getLast() {
return last;
}

}
public static void main(String[] args) {
MemorizingOutputStream memOut = new MemorizingOutputStream(System.out);
System.setOut(new PrintStream(memOut));

System.out.println("first");
System.out.println("second");
System.out.println("third");

System.err.println(memOut.getLast());
}
}

首先,它用记住最后一个字符串的特殊流替换标准输出流(假设字符串以 '\n' 结尾)。然后您可以查询该流以获取最后打印的字符串。请注意,此实现不是线程安全的。

关于java - 读取最后一个控制台输出并将其保存到变量/字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30034266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com