如何在不检查大小或越界的情况下获取字符串的前n个字符?
2022-08-31 06:25:38
如何在Java中处理字符串的第一个字符,而无需先进行大小检查(内联是可以接受的)或冒着风险?n
IndexOutOfBoundsException
如何在Java中处理字符串的第一个字符,而无需先进行大小检查(内联是可以接受的)或冒着风险?n
IndexOutOfBoundsException
这是一个简洁的解决方案:
String upToNCharacters = s.substring(0, Math.min(s.length(), n));
观点:虽然这个解决方案是“整洁的”,但我认为它实际上比以明显的方式使用if
/ else
的解决方案可读性更差。如果读者没有看到这个技巧,他/她必须更加努力地思考才能理解代码。IMO,代码的含义在if
/ else
版本中更为明显。有关更清晰/更具可读性的解决方案,请参阅@paxdiablo的答案。
不要重新发明轮子...:
org.apache.commons.lang.StringUtils.substring(String s, int start, int len)
Javadoc 说:
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, 2) = "ab"
因此:
StringUtils.substring("abc", 0, 4) = "abc"