有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中自动省略字符串

Java中有没有自动省略字符串的方法?只是在Java中,而不是在其他库中

谢谢


共 (3) 个答案

  1. # 1 楼答案

    根据您的用例,在字母之间加省略号可能会很有用(即在末尾加字母以提供一些上下文):

    /**
     * Puts ellipses in input strings that are longer than than maxCharacters. Shorter strings or
     * null is returned unchanged.
     * @param input the input string that may be subjected to shortening
     * @param maxCharacters the maximum characters that are acceptable for the unshortended string. Must be at least 3, otherwise a string with ellipses is too long already.
     * @param charactersAfterEllipsis the number of characters that should appear after the ellipsis (0 or larger) 
     * @return the truncated string with trailing ellipses
     */
    public static String ellipsize(String input, int maxCharacters, int charactersAfterEllipsis) {
      if(maxCharacters < 3) {
        throw new IllegalArgumentException("maxCharacters must be at least 3 because the ellipsis already take up 3 characters");
      }
      if(maxCharacters - 3 > charactersAfterEllipsis) {
        throw new IllegalArgumentException("charactersAfterEllipsis must be less than maxCharacters");
      }
      if (input == null || input.length() < maxCharacters) {
        return input;
      }
      return input.substring(0, maxCharacters - 3 - charactersAfterEllipsis) + "..." + input.substring(input.length() - charactersAfterEllipsis);
    }
    

    您可能还希望从省略号算法中获得更复杂的功能:如果需要将文本放置到图形元素中,并且使用比例字体,则必须测量字符串的长度

    对于Swing/AWT,这将是java.awt.Font.getStringBounds。在这种情况下,一个简单的算法会将字符串一次剪切一个字母,并添加省略号,直到字符串符合给定的限制。如果经常使用,在http://www.codeproject.com/KB/cs/AutoEllipsis.aspx?msg=3278640(C#,但应该很容易翻译成Java)中详述的二分法可能会节省一些处理器周期

  2. # 2 楼答案

    oneliner当然不会比其他提供的解决方案表现更好:

    longString.replaceFirst("(.{5}).+(.{5})", "$1...$2")
    

    将只留下第一个和最后5个字符,并将。。。在中间。

  3. # 3 楼答案

    此方法将返回省略的字符串:

    String ellipsize(String input, int maxLength) {
        String ellip = "...";
        if (input == null || input.length() <= maxLength 
               || input.length() < ellip.length()) {
            return input;
        }
        return input.substring(0, maxLength - ellip.length()).concat(ellip);
    }