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

28 java string

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

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

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

jjn*_*guy 52

你可以完全按照自己的意愿行事String.substring().

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

  • 你知道如果(str.length()> 13)对吗?以某种方式,如果str.length是14,你会不会有一个超出范围的索引?:P (2认同)

Col*_*inD 36

String foo = someString.substring(0, Math.min(13, someString.length()));
Run Code Online (Sandbox Code Playgroud)

编辑:仅供一般参考,从Guava 16.0开始,您可以:

String truncated = Ascii.truncate(string, 16, "...");
Run Code Online (Sandbox Code Playgroud)

使用省略号截断最多16个字符的长度.

在旁边

但是请注意,截断字符串以便按字符显示对于任何可能需要考虑i18n的内容来说都不是一个好的系统.它至少有一些不同的问题:

  1. 您可能希望将字边界和/或空格考虑在内,以避免在尴尬的地方截断.
  2. 拆分代理对(尽管可以通过检查要截断的字符是否是代理对的第一个来避免这种情况).
  3. 拆分一个字符和一个跟在它e后面的组合字符(例如后跟一个强调该字符的组合字符e.)
  4. 字符的外观可能会根据某些语言中跟随它的字符而改变,因此只要截断该字符就会产生甚至看起来不像原始字符的字符.

由于这些原因(及其他),我的理解是,截断了在UI显示最佳实践是真正淡出屏幕上的点上的文字的渲染,而不是截断基础字符串.