2012-10-18 8 views
7

Próbuję zrobić podciąg, który pozwala mi mieć do 6 liter nazwiska, jednak to, co mam tutaj, wydaje się powodować błąd, gdy znajdzie nazwisko o wartości mniejszej niż 6 liter, czekałem przez kilka godzin na rozwiązanie bez sucess:/Podłoża w Javie - długość do wartości

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

To .substring(0,6). Muszę ją mieć maksymalnie 6 liter nie dokładnie 6.

Błąd:

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) 

Odpowiedz

30

Zastosowanie

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

+1 Inteligentna odpowiedź ... –

+0

Dziękujemy! Teraz zadziałało, muszę go zrozumieć! :) – user1756421

+0

'Math.min (6, secondName.length())' jest '6' jeśli' secondName.length()> 6', to 'secondName.length()' w drugim przypadku. –

0

Choć nie przewiduje się błąd, to było całkiem proste do wykrycia problemu:

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 To może być bardziej czytelny:

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

Wolę

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

Będziesz coraz java.lang.StringIndexOutOfBoundsException.

Należy upewnić się, że długość jest zawsze mniejsza niż długość łańcucha. Coś jak

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

To może być rozwiązanie: Sprawdź długość nazwiskiem i zdecydować odpowiednio

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); 
Powiązane problemy