我正在做我的java项目,在程序的一个部分,我正在打印文本文本显示在左侧但是我想把它放在中间有多少人完成了这个?这是一个新手问题吗?
的例子:
public static void main(String[] args)
{
System.out.println("Hello");
}
快速回答
您可以使用JavaCurses库在控制台上做一些有趣的事情。看下面,它在那里。
在你这样做之前,让我们在某些上下文中回答你的整个问题
这是一个新手问题:)但这是一个有效的问题。给你一些提示:
第一个问题是,终端有多宽?(以字符数计算)旧终端的固定尺寸为80个字符和25行;
那么作为第一步,假设它是80个字符宽。
如何在80个字符宽的终端屏幕上将字符串居中?
你需要担心字符串的长度吗?你如何水平定位某物?你会加空格吗?你能想出一个格式字符串吗?
一旦你写了一个程序,你可以给它任何字符串,将正确显示在这些假设(终端是80个字符宽),你现在可以开始担心,如果你连接到一个终端大于或小于80个字符会发生什么?或者你是否连上了终端。例如,如果你不是,那么"美化"有意义吗?你的代码吗?可能不会。
问题是你是怎么得到这些信息的?
您所要求的是将控制台视为具有基于字符的控制功能的智能电传打字机(tty)终端的能力。老年人的电传终端机可以做很多有趣的事情。
<标题> 一些历史电传终端是复杂的东西,并且来自于有很多终端制造商(IBM, DEC等)的传统…这些电传终端机的开发是为了解决许多问题,例如能够从大型机和小型机远程显示内容。
有一堆终端标准vt100, vt200, vt220, ansi,它们出现在终端开发历史的不同阶段,以及数百个专有标准。
这些终端可以定位光标,窗口和颜色,高亮文本,下划线等,但不是每个人都可以做所有事情。然而,这是通过"控制"来完成的。字符。Ctrl-l在ANSI和vt终端上是清除屏幕,但在其他终端上可能是页面提要。
如果你写了一个特定的程序,它在其他地方就没有意义了。因此,简化的必要性导致了一些抽象库的开发,这些库将隐藏这些丑陋之处。
第一个叫做termcap (terminal-capabilities)库,大约在1978年,它提供了在UNIX系统上处理终端的通用方法。它可以告诉正在运行的程序终端的可用功能(例如改变文本颜色的能力)或光标在某个位置的位置,或清除自身等,然后程序将相应地修改其行为。第二个库叫做curses,大约在1985年(?? ?),它是作为BSD系统的一部分开发的,用于编写游戏…这个库最流行的版本之一是GNU curses库(以前称为ncurses)。
在VMS上,我记得这个库叫做SMG$(屏幕管理库)。
有答案
无论如何,因此您可以在java中使用这些库之一来确定您是否在正确的终端上工作。在source forge上有一个名为JavaCurses的库,它为java程序提供了这种能力。这将是一次学习如何在程序中使用新库的练习,应该是令人兴奋的。
JavaCurses提供Unix和Windows环境下的终端编程能力。这将是一个有趣的练习,看看你是否可以用它来玩。
<标题>高级健身h1> 一个练习是使用相同的库,看看是否可以创建一个在终端上显示良好的程序,并且可以在不使用终端代码的情况下将其写入文本文件;如果你有任何问题,请写下来,我会帮助你的。
标题>标题>如果您有一个明确的行长度,apache commons StringUtils.center
将很容易完成这项工作。但是,您必须添加该库。javadoc
到控制台的Java打印语句不能居中,因为一行没有最大宽度。
如果您的控制台被限制为,例如,80个字符,您可以编写一个特殊的记录器,用空格填充字符串。
如果字符串大于80个字符,则必须截断字符串并在下一行打印剩余的字符。另外,如果其他人使用不同宽度(特别是更小)的控制台来使用你的应用,那看起来会很奇怪。
所以基本上,不,没有简单的方法来居中输出…
你可以这样做:
public static void main(String[] args) {
String h = "Hello";
System.out.println(String.format("%-20s", h));
}
此方法输出一个给定数量的空格偏移的字符串。在本例中,Hello
前面有20个空格。空格在Hello
前面,因为%
和s
之间的整数是负数,否则空格在后面。
只是打乱%
和s
之间的整数,直到你得到想要的结果。
Apache有一个很好的库:"org.apache.commons",里面有一个StringUtils类:
https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.htmlpad方法是你想要的:
int w = 20;
System.out.println(StringUtils.rightPad("+", w - 1, "-") + "+");
System.out.println(StringUtils.center(StringUtils.center("output", w - 2), w, "|"));
System.out.println(StringUtils.rightPad("+", w - 1, "-") + "+");
将给你:
+----------------------+
| output |
+----------------------+
你不能。您正在写入没有宽度的控制台,因此中心未定义。
如果您知道大小,并且不想使用外部库,您可以这样做:
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个空格的左侧