线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:10

时间:2015-09-29 20:02:59

标签: java string

尝试显示长度恰好为10个字符的消息。当消息超过10个字符时,有人能指出我正确的方向吗?

到目前为止,这是我的代码:

System.out.println("Word:");
String word = scan.nextLine();

String shortword = word.substring(0, 10);   
String shortworduppercase = shortword.toUpperCase();
System.out.println(shortworduppercase); 

我知道它与padRight有关,但我似乎无法得到任何工作。

2 个答案:

答案 0 :(得分:2)

如果您在询问如何获取填充和/或截断为10个字符的字符串,那么有很多方法可以实现。例如,这里有一个处理所有非null情况而不依赖于任何(显式)条件逻辑的情况:

String getTenChars(String input) {
    return new StringBuilder(input).append("          ").subString(0, 10);
}

答案 1 :(得分:1)

如果字符串的长度缩短,而您尝试子字符串的结束索引将缩短,则会得到java.lang.StringIndexOutOfBoundsException

在这种情况下,您需要在子串之前检查字符串的长度

int maxLength = 10;
String shortWord;
if (word.length() <= maxLength){
    shortWord = word;
} else {
    shortWord = word.substring(0,maxLength);
}
System.out.println(shortWord);

如果你真的需要一个10长度的字符串,你可以使用setLength类的StringBuilder方法。

例如:

int maxLength = 10;
StringBuilder shortWord;
if (word.length() <= maxLength) {
    shortWord = new StringBuilder(word);
    shortWord.setLength(10);
} else {
    shortWord = new StringBuilder(word.substring(0, maxLength));
}