ant*_*upe 151 java string indexoutofboundsexception
如何n在不首先进行大小检查(内联是可接受的)或冒险的情况下,IndexOutOfBoundsException如何使用Java中的字符串的第一个字符?
Ste*_*n C 333
这是一个简洁的解决方案:
String upToNCharacters = s.substring(0, Math.min(s.length(), n));
Run Code Online (Sandbox Code Playgroud)
意见:虽然这个解决方案"整洁",但我认为它实际上不如使用if/ else以明显方式使用的解决方案.如果读者没有看到这个技巧,他/她必须更加努力地理解代码.IMO,代码的含义在if/ elseversion中更为明显.有关更清晰/更易读的解决方案,请参阅@ paxdiablo的答案.
小智 82
不要重新发明轮子......:
org.apache.commons.lang.StringUtils.substring(String s, int start, int len)
Run Code Online (Sandbox Code Playgroud)
Javadoc说:
Run Code Online (Sandbox Code Playgroud)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"
Run Code Online (Sandbox Code Playgroud)
Sku*_*uli 36
Apache Commons Lang有一个StringUtils.left方法.
String upToNCharacters = StringUtils.left(s, n);
Run Code Online (Sandbox Code Playgroud)
pax*_*blo 12
有一类关于SO的问题有时会产生不完美的意义,这个问题很危险:-)
也许你可以解释你厌恶使用你排除的两种方法之一.
如果只是因为你不想用if语句或异常捕获代码来编写代码,那么一种解决方案就是使用一个帮助你的函数,例如:
static String substring_safe (String s, int start, int len) { ... }
Run Code Online (Sandbox Code Playgroud)
这将预先检查长度并相应地采取行动(返回较小的字符串或带空格的垫).
然后你根本不用担心代码,只需调用:
String s2 = substring_safe (s, 10, 7);
Run Code Online (Sandbox Code Playgroud)
代替:
String s2 = s.substring (10,7);
Run Code Online (Sandbox Code Playgroud)
这可能适用于您似乎担心(基于您对其他答案的评论),而不是在执行大量字符串构建时破坏代码流.
13r*_*ren 12
String upToNCharacters = String.format("%."+ n +"s", str);
Run Code Online (Sandbox Code Playgroud)
如果n是一个变量,那就太可怕了(所以你必须构造格式字符串),但如果是常量则非常清楚:
String upToNCharacters = String.format("%.10s", str);
Run Code Online (Sandbox Code Playgroud)
使用子串方法,如下:
int n = 8;
String s = "Hello, World!";
System.out.println(s.substring(0,n);
Run Code Online (Sandbox Code Playgroud)
正如一位评论者所指出的,如果 n 大于字符串的长度,这将引发异常。if(s.length()<n)一个简单的解决方案是将所有这些包装在子句的条件中else,您可以选择是否只想打印/返回整个字符串或以其他方式处理它。
| 归档时间: |
|
| 查看次数: |
237087 次 |
| 最近记录: |