如何将打印语句文本居中?
所以我正在研究我的java项目,在程序的一部分我正在打印文本文本显示在左侧但是我希望它显示在中间有多少我完成了这个? 这是一个新手问题吗?
例:
public static void main(String[] args) { System.out.println("Hello"); }
非常快速回答
您可以使用JavaCurses库在控制台上执行有趣的操作。 请阅读下面的内容。
在你做之前,让我们在某些情况下回答你的整个问题
这是一个新手问题:)但这是一个有效的问题。 所以给你一些提示:
第一个问题是,终端有多宽? (以字符数计算)旧终端的固定尺寸为80个字符和25行;
因此,作为第一步,假设它是80个字符宽。
如何将字符串置于80字符宽的终端屏幕上?
你需要担心弦的长度吗? 你如何水平定位? 你添加空格吗? 你能想出一个格式字符串吗?
一旦你编写了一个程序,你可以给它任何字符串,这些字符串将在这些假设上正确显示(该终端是80个字符宽)你现在可以开始担心如果你连接到一个或多或少的终端会发生什么超过80个字符? 或者您是否连接到终端。 例如,如果你不是,那么“美化”你的代码是否有意义? 可能不是。
所以问题是你如何获得所有这些信息?
您要求的是能够将控制台视为具有基于字符的控制function的智能电传打字机(tty)终端。 旧式电传终端可以做很多有趣的事情。
一些历史
电传终端是复杂的东西,来自传统,有很多终端制造商(IBM,DEC等)…这些电传终端开发,以解决许多问题,如能够从大型机和小型机远程显示内容。
有许多终端标准vt100,vt200,vt220,ansi,它们来自终端开发历史中的各个点以及沿途的数百个专有标准。
这些终端可以定位游标和窗口和颜色,突出文本,下划线等但不是每个人都可以做任何事情。 然而,这是使用“控制”字符完成的。 ctrl-l是ansi和vt终端上的清晰屏幕,但它可能是其他内容的页面提要。
如果您编写了一个特定于一个程序的程序,那么其他地方就没有意义 因此,制作这么简单的必要性导致开发了一些隐藏了可怕性的抽象库。
第一个称为termcap(终端能力)库,大约1978年,它提供了一种处理UNIX系统终端的通用方法。 它可以告诉正在运行的程序终端的可用function(例如改变文本颜色的能力)或将光标定位在某个位置,或清除自身等,然后程序会相应地修改其行为。
第二个库叫做curses,大约在1985年(??)它是作为BSD系统的一部分开发的,用来编写游戏……这个库最流行的版本之一是GNU curses库(以前称为ncurses) )。
在VMS上,我相信该库名为SMG $(屏幕管理库)。
随着答案
如何,所以你可以在java中使用这些库中的一个来确定你是否正在使用正确的终端。 源forge上有一个名为JavaCurses的库,它为java程序提供了这种function。 这将是学习如何在您的课程中使用新图书馆的练习,应该是令人兴奋的。
JavaCurses在Unix和Windows环境中提供终端编程function。 这将是一个有趣的练习,你看看你是否可以使用它来玩。
高级运动
另一个练习是使用相同的库来查看是否可以创建一个在终端上很好地显示的程序,并且还可以写出没有终端代码的文本文件;
如果您有任何问题,请发布,我会随时为您提供帮助。
你可以这样做:
public static void main(String[] args) { String h = "Hello"; System.out.println(String.format("%-20s", h)); }
此方法通过给定数量的空格输出字符串偏移量。 在这种情况下, Hello
前面有20个空格。 空格先于Hello
因为%
和s
之间的整数是负数,否则空格将是尾随的。
只需弄乱%
和s
之间的整数,直到得到所需的结果。
控制台的Java打印语句无法居中,因为行没有最大宽度。
如果您的控制台仅限于80个字符,您可以编写一个特殊的记录器来填充带有空格的字符串。
如果你的字符串大于80个字符,那么你必须剪切字符串并在下一行打印剩余字符串。 此外,如果其他人使用您的应用程序与不同宽度(特别是更小)的控制台,如果看起来很奇怪。
所以基本上,不,没有简单的方法来集中输出……
如果你有一个确定的行长度apache commons StringUtils.center
将很容易地完成这项工作。 但是,如果您想添加该库。 的javadoc
如果您知道大小并且不想使用外部库,则可以执行以下操作:
static void printer(String str, int size) { int left = (size - str.length()) / 2; int right = size - left - str.length(); String repeatedChar = "-"; StringBuffer buff = new StringBuffer(); for (int i = 0; i < left; i++) { buff.append(repeatedChar); } buff.append(str); for (int i = 0; i < right; i++) { buff.append(repeatedChar); } // to see the end (and debug) if using spaces as repeatedChar //buff.append("$"); System.out.println(buff.toString()); } // testing: printer("string", 30); // output: // ------------string------------
如果你用size
变量的奇数号码来调用它,那么它将是一个-
更多的是右边。 您可以将repeatedChar
更改为空格。
编辑
如果你只想打印一个char
并且你知道它的大小,你可以使用默认的System.out.printf
这样做:
int size = 10; int left = size/2; int right = size - left; String format = "%" + left + "c%-" + right + "c"; // would produce: "%5c%-5c" System.out.printf(format,' ', '#'); // output: " # " (without the quotes)
%-5c
将#
字符对齐分配给它的5个空格的左侧
你不能。 您正在写入没有宽度的控制台,因此未定义中心。
- 我该如何删除按钮?
- Facebook登录sdk – Android
- 将图像从Android客户端发送到AppEngine Cloud Endpoint
- Android GoogleMaps V2 MarkerDemo IllegalStateException没有包括点
- 为什么LocalBroadCastManager从IntentService发送的意图没有被Activity类中的BroadCastReceiver接收?
- 如何将Android意图传递给除我自己的应用之外的任何人?
- 以编程方式获取谷歌搜索结果计数的最简单(合法)方式?
- JSON对象无法转换为JSON数组
- Google Maps API V2崩溃 – 致命exception