Java:如何将OutputStream上的文本格式化为用户的宽度';谁的控制台?
具体来说,我希望发送到用户OutputStream的文本具有单词包装,以便当文本继续到新行时,单词不会被拆分。因此,与此相反:Java:如何将OutputStream上的文本格式化为用户的宽度';谁的控制台?,java,text,console,word-wrap,outputstream,Java,Text,Console,Word Wrap,Outputstream,具体来说,我希望发送到用户OutputStream的文本具有单词包装,以便当文本继续到新行时,单词不会被拆分。因此,与此相反: The quick brown fox j umps over the lazy do g. 它将显示在控制台中,如下所示: The quick brown fox jumps over the lazy dog. 我知道的一个选项是编写一个这样的方法,将文本换行到特定的字符宽度: wrapText(String text, int width) 但我更希望文
The quick brown fox j
umps over the lazy do
g.
它将显示在控制台中,如下所示:
The quick brown fox
jumps over the lazy
dog.
我知道的一个选项是编写一个这样的方法,将文本换行到特定的字符宽度:
wrapText(String text, int width)
但我更希望文本自动换行到用户控制台的当前宽度。有没有办法做到这一点?java中的任何对象都可以帮助我吗?谢谢 A将帮助您确定在何处断线,从那里您可以轻松地自己进行实际的断线
但是,我不知道如何确定(自动、跨平台)用户控制台的宽度。要获取控制台的宽度,您可以使用库。它不是纯Java,有一些本机代码,但具有您需要的功能,可以在Windows、Max和Linux上使用
在JLine中,要获取控制台宽度,请使用类并调用
getTerminalWidth()
首先,您应该考虑一个编写器
,而不是输出流
。OutputStream
处理二进制数据,而不是文本。(要编写文本,您通常需要将OutputStream
包装在OutputStreamWriter
或类似的东西中。)@Jon:PrintStream
(就像从System.out
获得的那样)可以直接处理字符数据(不考虑潜在的字符编码问题)。@Jon:好的,所以我的思路是正确的。我现在已经将OutputStream包装在PrintWriter中,但我不确定是否应该使用该Writer来解决此问题。@BalusC:PrintStream可以,但在我看来通常不应该使用,考虑到它接受错误的方式…@torjinx:我实际上会让你的类自己使用编写器
,然后调用方可以决定使用打印编写器
来包装输出流
。如果我试图检测用户控制台在套接字上的宽度,JLine会起作用吗?@torjinx你是说结束SSH/Telnet?是的。