13

最大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)
4

6 に答える 6

40

使用する

secondName.substring (0, Math.min(6, secondName.length()))
于 2012-10-18T13:32:20.413 に答える
4

Apache Commons の StringUtils クラスを試してください。

// This operation is null safe.
org.apache.commons.lang.StringUtils.substring(secondName, 0, 6);
于 2016-02-05T19:23:37.123 に答える
4

私は好む

secondName.length > 6 ? secondName.substring(0, 6) : secondName
于 2012-10-18T13:33:16.790 に答える
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); 
于 2012-10-18T13:36:45.457 に答える
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); 
于 2012-10-18T13:32:32.910 に答える
0

java.lang.StringIndexOutOfBoundsException が発生します。

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

int len = Math.min(6, secondName.length());
String id = firstName.substring (0,1).toLowerCase() + secondName.substring (0,len).toLowerCase();
于 2012-10-18T13:36:28.947 に答える