我想用“ \ 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)
你能帮我吗?
答案 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
函数使用正则表达式。您的输入有一个反斜杠,需要在输入中转义。对于正则表达式,必须再次转义此反斜杠