![]() |
1
74
我喜欢让“瘦”字算作半个字。简单而好的近似值。
然而,大多数省略号的主要问题是(imho),即在中间切掉单词。这里有一个考虑单词边界的解决方案(但不深入到像素数学和Swing API)。
|
![]() |
2
45
我很震惊没人提到 Commons Lang StringUtils#abbreviate() . 更新:是的,它没有考虑到苗条的字符,但我不同意,考虑到每个人都有不同的屏幕和字体设置,以及在这个页面上的大部分人可能正在寻找一个维护的库,如上述。 |
![]() |
3
26
看起来,您可能会从Java图形上下文的
附录:在解决这个问题时,区分模型和视图可能会有所帮助。模型是一个有限的UTF-16码位序列,而视图是一系列字形,在某些设备上以某种字体呈现。
在Java的特定情况下,可以使用“a HeRF=”“http://dass/java/Sava/Swing,SavigUntual.html,HTML,FontMetrics,%20Java.Lang.Stand,%20Javax .Swing,图标,%20It,%20It,%20It,%20It,%20Java.AWT.矩形,%20Java.AWT.矩形,%20java.
|
![]() |
4
10
如果你说的是一个网站,比如输出html/js/css,你可以扔掉所有这些解决方案,因为这里有一个纯粹的css解决方案。
它并没有简单到只将样式添加到CSS中,因为它与其他CSS交错;例如,它要求元素溢出:隐藏;如果您希望文本在一行上,
我有一个这样的样式表:
你甚至可以有一个“读取更多”按钮,只需运行一个javascript函数来更改样式,然后宾果游戏,框将重新调整大小,全文将可见。(在我的例子中,我倾向于使用HTML标题属性作为全文,除非它可能会变得很长) 希望有帮助。这是一个简单得多的解决方案,尝试混乱计算文本大小和截断它,等等。(当然,如果您正在编写一个非基于Web的应用程序,您可能仍然需要这样做) 这个解决方案有一个缺点:火狐不支持省略号样式。很烦人,但我不认为它是关键的——它仍然正确地截断文本,正如溢出处理的那样:隐藏,它只是不显示省略号。它在所有其他浏览器中都有效(包括IE,一直到IE5.5!)所以,火狐还没有做到这一点有点让人恼火。希望新版的火狐能很快解决这个问题。
[编辑]
|
![]() |
5
4
对我来说这是理想的-
我不会担心每个字符的大小,除非我真的知道它将在哪里以什么字体显示。许多字体都是固定宽度的字体,每个字符都有相同的尺寸。 即使它是一个可变宽度的字体,如果你把“i”、“l”计算为宽度的一半,那么为什么不把“w”、“m”计算为宽度的两倍呢?在一个字符串中混合这样的字符通常会平均出它们大小的影响,我宁愿忽略这些细节。明智地选择“长度”的值最重要。 |
![]() |
6
4
|
![]() |
7
4
这个怎么样(要得到50个字符的字符串):
|
![]() |
8
3
如果你担心省略号只隐藏了很少的字符,为什么不检查一下这个条件呢?
|
![]() |
9
3
我想买一些和你的标准型号类似的东西。我不想为字符宽度的问题操心——正如@gopi所说,最终可能会达到平衡。我想做的是,有另一个参数叫做“minnumberofhiddencharacters”(可能不那么详细)。然后在执行省略号检查时,我会做如下操作:
这意味着,如果文本长度为35,则“长度”为30,要隐藏的最小字符数为10,则会得到完整的字符串。如果要隐藏的最小字符数是3,那么您将得到省略号而不是这三个字符。 最重要的是我已经颠覆了“长度”的含义,所以它不再是最大长度。输出字符串的长度现在可以是30个字符(当文本长度为>40时)到40个字符(当文本长度为40个字符时)。实际上,我们的最大长度变为长度+最小隐藏字符数。当原始字符串小于30时,字符串当然可以短于30个字符,但这是一个我们应该忽略的无聊情况。 如果你想让长度成为一个硬性和快速的最大值,那么你需要的是:
所以在这个例子中,如果text.length()是37,length是30,minNumberOfHiddencharacters=10,那么我们将进入内部if的第二部分,得到27个字符+…使30。这实际上就像我们进入了循环的第一部分(这是一个标志,表明我们的边界条件是正确的)。如果文本长度是36,我们会得到26个字符+省略号,它给我们29个字符,10个隐藏字符。
我正在讨论重新排列一些比较逻辑是否会使它更直观,但最终决定还是保持原样。你可能会发现
|
![]() |
10
3
在我看来,如果没有像素数学,你就不能得到好的结果。 因此,当您处于Web应用程序上下文(如脸谱网)时,Java可能是解决此问题的错误端。 我会选择javascript。因为javascript不是我感兴趣的主要领域,所以我不能判断 this 是一个很好的解决方案,但它可能会给您一个指针。 |
![]() |
11
2
番石榴 com.google.common.base.Ascii.truncate(CharSequence, int, String) 方法:
|
![]() |
12
0
大多数解决方案不考虑字体度量,这是一个非常简单但工作的解决方案JavaSwing,我已经使用了很多年了。
|
|
user29759326 · 如何返回递归函数中的最后一个值? 3 月前 |
|
malife89 · 将java中的字符串读取为正确的日期格式 4 月前 |
![]() |
Tim · 在java中,有没有更快的方法将字节数组写入文件? 4 月前 |
![]() |
rudraraj · java中未声明最终变量 4 月前 |
![]() |
Bala Ji · 以下BFS的实施效率如何? 4 月前 |