代码之家  ›  专栏  ›  技术社区  ›  Milo Casagrande

在Java中自动生成一个字符串

  •  4
  • Milo Casagrande  · 技术社区  · 16 年前

    在Java中是否有一种方法自动对字符串进行椭圆化?只是在Java中,而不是其他库。

    谢谢。

    5 回复  |  直到 10 年前
        1
  •  7
  •   appersiano    11 年前

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

    /**
     * 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);
    }
    

    还有一些更复杂的特性,您可能需要省略号算法:如果您需要将文本放置到图形元素中,并且使用的是比例字体,那么您必须测量字符串的长度。

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

        2
  •  5
  •   cuh    15 年前

    此方法将返回椭圆化字符串:

    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);
    }
    
        3
  •  4
  •   anydoby    10 年前

    一个单一的解决方案,当然不会超过其他提供的解决方案:

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

    只留下前5个字符,然后放…在中间。

        4
  •  3
  •   Sean Owen    16 年前

    没有。但这是一个简单方法的另一个突破。

    String ellipsize(String input, int maxLength) {
      if (input == null || input.length() < maxLength) {
        return input;
      }
      return input.substring(0, maxLength) + "...";
    }
    
        5
  •  1
  •   paxdiablo    16 年前

    当然,试试这个:

    public static String ellipsise (String input, int maxLen) {
        if (input == null)
            return null;
        if ((input.length() < maxLen) || (maxLen < 3))
            return input;
        return input.substring (0, maxLen - 3) + "...";
    }
    

    这样做的好处是修复了国王英语使用不当的错误:—)