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

时间:2010-10-07 02:16:13

标签: java string

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

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

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

4 个答案:

答案 0 :(得分:52)

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

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

答案 1 :(得分:36)

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. 字符的外观可能会因某些语言中的字符而改变,因此只要截断该字符就会产生甚至看起来不像原始字符的内容。
  5. 由于这些原因(以及其他原因),我的理解是,在UI中显示截断的最佳做法是在屏幕上的正确位置实际淡出文本的呈现,而不是截断底层字符串。

答案 2 :(得分:4)

每当你认为某些操作是一件很常见的操作时,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 :(得分:0)

String str = "This is Mobile application."
System.out.println(str.subSequence(0, 13)+"...");