我收到ArrayIndexOutOfBoundsException
以下代码,即使该字符串长度为10个字符。错误发生在代码printedLine.insert(3, '-');
的第三行。
public class Program1 {
public static void main(String[] args) {
int caseNumber, numberOfCases;
String currentLine;
int lineNumber;
Scanner in = new Scanner(System.in);
numberOfCases = in.nextInt();
String[] phoneNumbers = new String[numberOfCases + 1];
for (caseNumber = 0; caseNumber <= numberOfCases; caseNumber++) {
phoneNumbers[caseNumber] = in.nextLine();
}
for (lineNumber = 0; lineNumber < phoneNumbers.length; lineNumber++) {
currentLine = phoneNumbers[lineNumber];
currentLine = currentLine.replaceAll("-", "");
if (currentLine.length() > 10) {
currentLine = currentLine.substring(0, 10);
}
System.out.println(currentLine);
StringBuffer printedLine = new StringBuffer(currentLine);
printedLine.insert(3, '-');
printedLine.insert(7, '-');
System.out.println(printedLine);
}
}
}
有谁知道为什么会这样?
更新:如果我只打印String Buffer对象,则所有值都与原始字符串排成一行,长度为10个字符。
答案 0 :(得分:2)
尝试使用更多令牌时使用in.nextInt();
的问题是它只读取int值。
当您按 Enter 插入另一个值并尝试使用in.nextLine();
时,它将消耗 Enter key“"\n"
“而不是你刚刚输入的价值!
这种问题有两种解决方案:
numberOfCases = in.nextInt();
in.nextLine(); // (It consumes the \n character)
或者
numberOfCases = Integer.parseInt(in.nextLine());
答案 1 :(得分:0)
你的第一个元素是phoneNumbers中的“”,即phoneNumbers [0]是空字符串。所以它的字符串长度是0,所以你不能这样插入。
这是您修复的程序。
import java.util.Scanner;
public class Program1 {
public static void main(String[] args) {
int caseNumber, numberOfCases;
String currentLine;
int lineNumber;
Scanner in = new Scanner(System.in);
numberOfCases = Integer.parseInt(in.nextLine());
String[] phoneNumbers = new String[numberOfCases];
for (caseNumber = 0; caseNumber < numberOfCases; caseNumber++) {
phoneNumbers[caseNumber] = in.nextLine();
}
for (lineNumber = 0; lineNumber < phoneNumbers.length; lineNumber++) {
currentLine = phoneNumbers[lineNumber];
currentLine = currentLine.replaceAll("-", "");
if (currentLine.length() > 10) {
currentLine = currentLine.substring(0, 10);
}
System.out.println(currentLine);
StringBuffer printedLine = new StringBuffer(currentLine);
printedLine.insert(3, '-');
printedLine.insert(7, '-');
System.out.println(printedLine);
}
}
}