是否有类似Java的C#子串?我正在为Blackberry设备创建一个移动应用程序,由于屏幕限制,我只能显示13个字母加上三个点作为省略号。
有关如何实现这一目标的任何建议吗?
我需要简单的Java而不是一些花哨的技巧,因为我怀疑移动设备是否可以访问完整的框架。至少根据我一年前使用Java ME的经验。
答案 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的内容来说都不是一个好的系统。它至少有一些不同的问题:
e
后跟一个重点放在e
上的组合字符。)由于这些原因(以及其他原因),我的理解是,在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)+"...");