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