我想用“ \ n”分割输入字符串

时间:2019-12-11 23:49:53

标签: java

我想用“ \ n”分割输入字符串,这是我的代码:

import java.util.ArrayList;
import java.util.Scanner;

public class toy_interpreter {

    public static String program;

    public static void getToyProgram() {

        Scanner prog1 = new Scanner(System.in);
        System.out.println("Please enter the toy program");
        program = prog1.nextLine();

    }

    public static String[] splitList() {

        return program.split("\n");
    }

    public static void main(String[] args) {

        getToyProgram();

        String[] parts = splitList();
        String part1 = parts[1];
        System.out.println(part1);      
    }
}

但是输出显示: 线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:1     在toy_interpreter.main(toy_interpreter.java:36)

你能帮我吗?

2 个答案:

答案 0 :(得分:1)

您正在prog1.nextLine()处读取一条奇异的行,因此我不确定您在数组中期望有多少个对象,但是从您的命名约定和错误代码中,我感觉到您可能没有意识到数组始于[0],而不是[1]。

在您的情况下,split()将整行保存为[0]。由于它在行尾结束,因此数组的长度为1,因为split()不会为空元素创建另一个String。您正在尝试访问[1],它是数组的第二个元素,不存在。因此,ArrayOutOfBoundsException!

如果要将多行保存到 program ,请确保不要仅使用=符号。它将用新的字符串覆盖以前的字符串。尝试使用 program + = 进行重复使用,或使用.concat()方法。 Java在编译期间将以相同方式处理这两种情况。为此,如果您打算从用户输入中构建多行字符串,则可能需要研究 StringBuilder 类。

答案 1 :(得分:0)

public static String[] splitList() {
    return program.split("\\\\n");
}

split函数使用正则表达式。您的输入有一个反斜杠,需要在输入中转义。对于正则表达式,必须再次转义此反斜杠