当前位置: 首页 > 面试题库 >

Java用省略号截断字符串的理想方法

轩辕涵亮
2023-03-14
问题内容

我敢肯定,我们所有人都在Facebook状态(或其他位置)上看到省略号,然后单击“显示更多”,并且只有另外两个字符左右。我猜这是由于懒惰的编程,因为肯定有一种理想的方法。

我的人把苗条的字符算作[iIl1]“半个字符”,但是当省略号几乎没有隐藏任何字符时,这并不能解决。

有没有理想的方法?这是我的:

/**
 * Return a string with a maximum length of <code>length</code> characters.
 * If there are more than <code>length</code> characters, then string ends with an ellipsis ("...").
 *
 * @param text
 * @param length
 * @return
 */
public static String ellipsis(final String text, int length)
{
    // The letters [iIl1] are slim enough to only count as half a character.
    length += Math.ceil(text.replaceAll("[^iIl]", "").length() / 2.0d);

    if (text.length() > length)
    {
        return text.substring(0, length - 3) + "...";
    }

    return text;
}

语言并不重要,但可以标记为Java,因为这是我最感兴趣的内容。


问题答案:

我喜欢让“瘦”字符算作半个字符的想法。简单而良好的近似。

然而,大多数省略的主要问题是(imho)他们在中间砍了字。这是一个考虑单词边界的解决方案(但不涉及像素数学和Swing-API)。

private final static String NON_THIN = "[^iIl1\\.,']";

private static int textWidth(String str) {
    return (int) (str.length() - str.replaceAll(NON_THIN, "").length() / 2);
}

public static String ellipsize(String text, int max) {

    if (textWidth(text) <= max)
        return text;

    // Start by chopping off at the word before max
    // This is an over-approximation due to thin-characters...
    int end = text.lastIndexOf(' ', max - 3);

    // Just one long word. Chop it off.
    if (end == -1)
        return text.substring(0, max-3) + "...";

    // Step forward as long as textWidth allows.
    int newEnd = end;
    do {
        end = newEnd;
        newEnd = text.indexOf(' ', end + 1);

        // No more spaces.
        if (newEnd == -1)
            newEnd = text.length();

    } while (textWidth(text.substring(0, newEnd) + "...") < max);

    return text.substring(0, end) + "...";
}


 类似资料:
  • 本文向大家介绍Powershell截取字符串并添加省略号的例子,包括了Powershell截取字符串并添加省略号的例子的使用技巧和注意事项,需要的朋友参考一下 限制字符串大小 支持所有版本。 确保你输出的字符串不会过长,当字符串超过你指定的长度你可以用下面办法将其缩短。

  • 本文向大家介绍ThinkPHP的截取字符串函数无法显示省略号的解决方法,包括了ThinkPHP的截取字符串函数无法显示省略号的解决方法的使用技巧和注意事项,需要的朋友参考一下 对于ThinkPHP的截取字符串函数无法显示省略号的情况,解决方法如下: 打开Common/extend.php页面,修改msubstr函数如下:

  • 本文向大家介绍C#实现根据字节数截取字符串并加上省略号的方法,包括了C#实现根据字节数截取字符串并加上省略号的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#按字节数截取字符串并在后面加上省略号...的方法,这是一个自定义的C#函数,函数的使用说明如下: 函数代码如下: 以下所示示例也是根据字节数截取字符串的,只是这个函数后面不加省略号……

  • 问题内容: Java中有没有一种方法可以自动省略一个字符串?仅使用Java,而不是其他库。 谢谢。 问题答案: 根据您的用例,将省略号放在字母之间可能会很有用(即,在末尾添加字母以提供一些上下文): 省略号算法可能还需要其他更复杂的功能:如果需要将文本放入图形元素中并且使用的是比例字体,则必须测量String的长度。 对于Swing / AWT来说应该是。在这种情况下,简单的算法可以一次将字符串切

  • 问题内容: 有没有人比显而易见的解决方案/库更复杂的解决方案/库,用于使用JavaScript截断字符串并在末尾添加省略号: 问题答案: 现在您可以执行以下操作: 如果“更复杂”是指在字符串的最后一个单词边界处截断,那么这可能就是您想要的: 现在您可以执行以下操作: 如果您不想扩展本机对象,则可以使用:

  • 本文向大家介绍Java截取字符串的方法,包括了Java截取字符串的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java截取字符串的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的java程序设计有所帮助。