有没有办法确定在java中打印到输出流的字符数?
例如,在 C 中, printf 返回在该特定语句中打印的字符数。
int i=printf("hello");
printf(i);
上面的代码会打印 hello 和 4;
有什么方法可以在 Java 中实现相同的功能吗?
如果您真的需要这些信息,那么我建议您使用 Jakarta Commons CountingOutputStream。但是,如果您需要有关单个打印语句级别的此信息,我会感到惊讶,因此也许您可以描述您要解决的实际问题。
您永远不应该做的一件事是计算您编写的字符串中的字符数。当然,除非您可以保证字符串中的字符完全由输出流中的单个字节表示。现在,以及永远的未来,这样当有人开始给你带重音字符或西里尔字母的字符串时,你就不会遇到一个难以找到的错误。
您正在打印,因此您知道要显示的字符串。简单的是你得到字符串长度。
string str="Hello World!";
System.out.println(str);
System.out.println(str.length());
有图书馆可以提供帮助。Google Guava 有一个CountingOutputStream包装一个OutputStream
并提供一个getCount()
方法。这将返回写入的字节,因此取决于编码。请参阅@parsifal 的答案,了解您需要关心的原因。但是,它不提供PrintStream
接口。Jakarta Commons IO 提供了一个类似的同名类。你可以这样做:
OutputStream os = ...;
CountingOutputStream cos = new CountingOutputStream(os);
PrintStream ps = new PrintStream(cos);
// write to ps.
ps.close();
long count = cos.getCount();
你可以做
String s= "hello";
System.out.println(s);
System.out.println(s.length());
我只是使用length()
常规字符串库/API 中的函数。我不确定是否有另一种方法或更简单的方法。不过很想知道!