13

我正在尝试创建一个子字符串,它可以让我拥有最多 6 个姓氏的字母,但是当它找到少于 6 个字母的姓氏时,我在这里所拥有的似乎会引发错误,我一直在寻找几个小时的解决方案没有成功:/

id = firstName.substring (0,1).toLowerCase() + secondName.substring (0,6).toLowerCase();
System.out.print ("Here is your ID number: " + id);

这是.substring(0,6). 我需要它最多为6 个字母,而不是 6 个。

错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
    at java.lang.String.substring(Unknown Source)
    at Test.main(Test.java:27)
4

6 回答 6

40

利用

secondName.substring (0, Math.min(6, secondName.length()))
于 2012-10-18T13:32:20.413 回答
4

我更喜欢

secondName.length > 6 ? secondName.substring(0, 6) : secondName
于 2012-10-18T13:33:16.790 回答
4

试试 Apache Commons StringUtils 类。

// This operation is null safe.
org.apache.commons.lang.StringUtils.substring(secondName, 0, 6);
于 2016-02-05T19:23:37.123 回答
1

这可能是一个解决方案:检查姓氏的长度并做出相应决定

if (secondName.length() >6)
id = firstName.substring (0,1).toLowerCase() + secondName.substring (0,6).toLowerCase(); 
else
id = firstName.substring (0,1).toLowerCase() + secondName.substring (0,secondName.length()).toLowerCase();

System.out.print ("Here is your ID number: " + id); 
于 2012-10-18T13:36:45.457 回答
0

尽管您没有提供错误,但很容易发现问题:

 id = firstName.substring (0,1).toLowerCase() + secondName.substring (0,6<secondName.length()?6:secondName.length).toLowerCase();
 System.out.print ("Here is your ID number: " + id); 

编辑这可能更具可读性:

 id = firstName.substring (0,1).toLowerCase() + (6<secondName.length()?secondName.substring(0,6):secondName).toLowerCase();
 System.out.print ("Here is your ID number: " + id); 
于 2012-10-18T13:32:32.910 回答
0

您将收到 java.lang.StringIndexOutOfBoundsException。

您需要确保长度始终小于字符串长度。就像是

int len = Math.min(6, secondName.length());
String id = firstName.substring (0,1).toLowerCase() + secondName.substring (0,len).toLowerCase();
于 2012-10-18T13:36:28.947 回答