2012-10-18 39 views
7

我在試圖製作一個子字符串,它可以讓我有多達6個字母的字母,但是我在這裏似乎在發現一個姓氏小於6個字母,我一直在尋找小時,沒有sucess的解決方案:/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個字母不完全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

'Math.min(6,secondName.length())'在secondName.length()> 6時爲'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); 

編輯這可能是更具可讀性:

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

我喜歡

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

你會得到一個java.lang.StringIndexOutOfBoundsException。

您需要確保長度始終小於字符串長度。像

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