2012-10-18 9 views
7

私は6文字までの姓を持つことができる部分文字列を作成しようとしていますが、ここでの姓は小文字以下の姓を見つけるとエラーになります6つの文字、ノー成功事例の持つソリューションのための時間を探しています/Javaのサブストリング - 最大値の

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

それは.substring(0,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) 

答えて

30

使用

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

+1スマートな答えを決める... –

+0

ありがとうございました!それは私がそれを理解する必要が今働いた! :) – user1756421

+0

'secondName.length()> 6の場合は' Math.min(6、secondName.length()) 'は' 6'で、それ以外の場合は 'secondName.length()'です。 –

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); 

をEDITこれは、より読みやすいかもしれません:

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

私はあなたがjava.lang.StringIndexOutOfBoundsExceptionを取得することがあります

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

を好みます。

長さが常に文字列の長さより短いことを確認する必要があります。

int len = Math.min(6, secondName.length()); 
String id = firstName.substring (0,1).toLowerCase() + secondName.substring (0,len).toLowerCase(); 
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); 
関連する問題