字符串插入方法不适用于非零索引

时间:2014-01-07 20:19:28

标签: java

我收到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个字符。

2 个答案:

答案 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);
        }
    }
}