有 Java 编程相关的问题?

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

在Java中给定一个字符串,只需取前X个字母

是否有类似Java的C#子字符串?我正在为Blackberry设备创建一个移动应用程序,由于屏幕限制,我只能显示13个字母加上3个点作为省略号

有没有关于如何实现这一目标的建议

我需要的是简单的Java,而不是一些花哨的把戏,因为我怀疑移动设备是否能够访问完整的框架。至少在我一年前使用Java的经验中是这样


共 (3) 个答案

  1. # 1 楼答案

    你可以用String.substring()做你想做的事

    String str = "please truncate me after 13 characters!";
    if (str.length() > 16)
        str = str.substring(0, 13) + "..."
    
  2. # 2 楼答案

    每当有一些您认为是非常常见的操作要执行时,Java API要求您检查边界、捕获异常、使用Math.min()等等(即需要比您预期的更多的工作),请检查Apache的commons-lang。它几乎总是以更简洁的格式出现。在本例中,您将使用StringUtils#substring,它为您处理错误案例。下面是javadoc所说的:

    Gets a substring from the specified String avoiding exceptions.
    
    A negative start position can be used to start n characters from the end of the String.
    
    A null String will return null. An empty ("") String will return "".
    
     StringUtils.substring(null, *)   = null
     StringUtils.substring("", *)     = ""
     StringUtils.substring("abc", 0)  = "abc"
     StringUtils.substring("abc", 2)  = "c"
     StringUtils.substring("abc", 4)  = ""
     StringUtils.substring("abc", -2) = "bc"
     StringUtils.substring("abc", -4) = "abc"
    
  3. # 3 楼答案

    String foo = someString.substring(0, Math.min(13, someString.length()));
    

    编辑:仅供一般参考,从Guava 16.0开始,您可以执行以下操作:

    String truncated = Ascii.truncate(string, 16, "...");
    

    以省略号截断最多16个字符

    旁白

    不过,请注意,对于可能需要考虑i18n的任何情况,截断字符串以按字符显示都不是一个好的系统。它(至少)有几个不同的问题:

    1. 您可能需要考虑单词边界和/或空格,以避免在不方便的地方截断
    2. 分割代理项对(尽管这可以通过检查要截断的字符是否是代理项对的第一个字符来避免)
    3. 拆分字符和其后的组合字符(例如e后跟强调该e的组合字符。)
    4. 在某些语言中,字符的外观可能会因其后面的字符而异,因此仅截断该字符就会产生与原始字符不一样的效果

    出于这些原因(以及其他原因),我的理解是,在UI中显示截断的最佳实践是在屏幕上正确的位置淡出文本的呈现,而不是截断底层字符串