如何在不检查大小或超出范围的情况下获取字符串的前n个字符?

问题

如何在不首先进行大小检查(内联是可接受的)或冒险使用aIndexOutOfBoundsException的情况下,如何使用Java中的字符串的firstn字符?


#1 热门回答(278 赞)

这是一个简洁的解决方案:

String upToNCharacters = s.substring(0, Math.min(s.length(), n));

意见:虽然这个解决方案是"整洁的",但我认为这显然是一种使用if/else的解决方案。如果读者没有看到这个伎俩,他/她已经深入了解代码。 IMO,代码的含义在if / elseversion中更为明显。有关更清晰/更易读的解决方案,请参阅@ paxdiablo的答案。


#2 热门回答(59 赞)

不要重新发明轮子......:

org.apache.commons.lang.StringUtils.substring(String s, int start, int len)

Javadocsays:

StringUtils.substring(null,)= null
StringUtils.substring("",)="";
StringUtils.substring("abc",0,2)="ab"
StringUtils.substring("abc",2,0)=""
StringUtils.substring("abc",2,4)="c"
StringUtils.substring("abc",4,6)=""
StringUtils.substring("abc",2,2)=""
StringUtils.substring("abc", - 2,-1)="b"
StringUtils.substring("abc", - 4)="ab"

从而:

StringUtils.substring("abc", 0, 4) = "abc"

#3 热门回答(18 赞)

Apache Commons Lang这是一个aStringUtils.left方法。

String upToNCharacters = StringUtils.left(s, n);