【问题标题】:Printing plain text in an aligned grid format以对齐的网格格式打印纯文本
【发布时间】:2015-12-14 22:25:15
【问题描述】:

我很想知道以网格布局格式或表格布局格式打印文本的方法,其中输入文本在列|行类型布局中垂直对齐-(可以是任何语言,我感兴趣食谱)

例如,假设我有一个代表我的行的字符串数组

String[] s = new String[]{"Adele","Taylor","Katty","Beyonce","Mariah"};
String[] s1 = new String[]{"Java","Android","Ruby","Pascal","Python"};
String[] s2 = new String[]{"Ronaldo","Ibrahimovic","Tevez","Rooney","Ronaldhino"};
String[] s3 = new String[]{"Stackoverflow","Facebook","Twitter","Amazon","Scrybasms"};

我想以类似这样的表格格式将其打印到控制台/文本文件/等

Adele                  Taylor               Katty                        Beyonce                                Mariah 
Java                   Android              Ruby                         Pascal                                 Python 
Ronaldo                Ibrahimovic          Tevez                        Rooney                                 Ronaldhino
Stackoverflow          Facebook             Twitter                      Amazon                                 Scrybasms                                      

但是您可以看到它们没有正确对齐;在 gui 应用程序上,这是它的外观

在我的日食上

它们都有不同的对齐方式,我不知道为什么,因此我想要一种更好的通用方式来实现我想要的。谢谢

编辑

谢谢大家,评论者和回答者我已经用出现最多的单词“MonoSpace”解决了这个问题。 :)

【问题讨论】:

  • 这是不可能的,因为您不知道将使用哪种字体来显示文本(对于文本文件,它取决于显示它的程序,甚至可能是程序设置 - 您已经在问题)。如果是 gui 库,您可以设置字体或确定字体并使用它的属性来测量文本宽度(不保证给定字体甚至可以精确对齐 [等宽字体除外]。)跨度>
  • 我认为在这种情况下使用Table 更合适。
  • @fabian 我现在正在尝试它会让你知道发生了什么事,谢谢你,如果我能让它工作-再次感谢你;希望你的前三个词不是意味着它们听起来的方式:)
  • 你能给我一个使用表格的逻辑,让它看起来和功能像一个文本显示吗?尽管@PhamTrung,我会很高兴我远离赏金的一天
  • 在 Java 中填充文本的选项很少。您可以使用 Strings.format、Apache StringUtils 或 Guava 库。在所有这些中,用于输出的文本都应该是等宽的。

标签: java string algorithm text javafx


【解决方案1】:

eclipse 中,它是等宽字体,如下所示:

aaaa bbbb cccc dddd
eeee ffff gggg hhhh
iiii jjjj kkkk llll

在您的应用程序中,它不是等宽字体,如下所示:

aaaa bbbb cccc

dddd eeee ffff

gggg hhhh iii

jjjj kkkk llll

所以现在你明白为什么它在你的 Eclipse 中正确对齐但在你的应用程序中失败了。

【讨论】:

  • @Elltz 不客气 :) 如果这里没有更多问题,最好将其中一个答案设置为已接受。
【解决方案2】:

使用等宽字体并将文本与空格对齐。

或者为每一列文本使用单独的 UI 元素(文本框)。然后每列将在本地对齐其文本,独立于其他列。

【讨论】:

  • 嗯,这将是昂贵的先生,你不觉得吗?另外,如果我要将整个节点视为文本显示,那么它需要像一个一样运行吗?例如,像在我的文本显示器上查找东西等。先生有什么提示吗?
  • 如果您想扩展搜索等功能,您可以定义自己的由几个文​​本框(列)组成的文本元素,然后将感兴趣的功能转发到每个内部文本框。您还可以使用此自定义元素来管理文本(即,当您插入一个元素时,您不只是向下推该列中的文本,而是将它们重新排列成您希望的样子)。
  • 滚动您自己的自定义元素总是更昂贵。但是,如果默认的不符合您的要求,您可以接受或实施您自己的(或聘请某人为您做)。
  • 谢谢先生。非常有帮助 - 我的意思是 monspace,其余的都很好,谢谢先生
【解决方案3】:

大多数语言都有一个 pad 函数,它接受一个字符串并用空格填充它,直到它达到所需的长度。如果他们不支持这一点,他们至少支持 C 字符串格式,这允许像 "%1$10s" 之类的东西(这将在字符串的前面放置最多 10 个空格)。

这是一种将内容填充到特定长度的更简单的方法,但它仍然需要一个等宽字体才能看起来正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 2014-12-11
    • 2011-04-08
    • 1970-01-01
    相关资源
    最近更新 更多