给定Java中的字符串,只需要输入前X个字母

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

有关如何实现这一目标的任何建议?

我需要简单的Java而不是一些花哨的技巧,因为我怀疑移动设备是否可以访问完整的框架。 至少在我一年前使用Java ME的经验中。

您可以使用String.substring()完全按照自己的意愿执行操作。

 String str = "please truncate me after 13 characters!"; if (str.length() > 16) str = str.substring(0, 13) + "..." 
 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后跟一个组合字符,强调该字符。)
  4. 字符的外观可能会根据某些语言中跟随它的字符而改变,因此只要截断该字符就会产生甚至看起来不像原始字符的字符。

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

每当你认为某些操作是一件很常见的事情时,Java API就要求你检查边界,捕获exception,使用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" 
 String str = "This is Mobile application." System.out.println(str.subSequence(0, 13)+"...");