Java中的子字符串 - 长度最大为一个值

时间:2012-10-18 13:30:19

标签: java string substring

我试图制作一个子字符串,这个子字符串最多可以包含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)

6 个答案:

答案 0 :(得分:34)

使用

secondName.substring (0, Math.min(6, secondName.length()))

答案 1 :(得分:2)

我更喜欢

secondName.length > 6 ? secondName.substring(0, 6) : secondName

答案 2 :(得分: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); 

答案 3 :(得分:1)

Try the Apache Commons StringUtils class.

// This operation is null safe.
org.apache.commons.lang.StringUtils(secondName, 0, 6);

答案 4 :(得分: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); 

答案 5 :(得分:0)

您将获得java.lang.StringIndexOutOfBoundsException。

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

这样的东西
int len = Math.min(6, secondName.length());
String id = firstName.substring (0,1).toLowerCase() + secondName.substring (0,len).toLowerCase();