在使用 myString.split(“\n”) 时遇到问题;

2022-09-04 20:06:14

我需要将输入字符串拆分为多个部分。拆分应发生在“\n”处(字面意思是反斜杠-n,而不是换行符)。例如,我想转动这个:

x = [2,0,5,5]\ny = [0,2,4,4]\ndraw y #0000ff\ny = y & x\ndraw y #ff0000

进入这个:

x = [2,0,5,5]
y = [0,2,4,4]
draw y #0000ff
y = y & x
draw y #ff0000

我本来以为这就足够了。stringArray = string.split("\n");

但它为我提供的输出与以下代码中的输入相同:

public static void main(String[] args) throws IOException{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Enter Input\n");
    String s = br.readLine();
    NewInterpreter interpreter = new NewInterpreter(s);
    interpreter.run();
}

public NewInterpreter(String input) {
    this.input = input;
    this.index = 0;
    this.inputComponents = input.split("\n");
    System.out.println("Output: ");
    for(String s : inputComponents)
        System.out.println(s);
}
Enter Input
x = [2,0,5,5]\ny = [0,2,4,4]\ndraw x #00ff00\ndraw y #0000ff\ny = y & x\ndraw y #ff0000"
Output: 
x = [2,0,5,5]\ny = [0,2,4,4]\ndraw x #00ff00\ndraw y #0000ff\ny = y & x\ndraw y #ff0000

任何帮助都非常感谢,谢谢!


答案 1

如果您按字面意思输入(即,而不是换行符),则需要按如下方式拆分:\n

string.split("\\\\n");

复杂性的原因是将正则表达式作为参数。尝试使用正则表达式匹配文本反斜杠时,需要对其进行双重转义(一次用于正则表达式,一次用于字符串文本)。split()


答案 2

通过 阅读的文本中不能有任何换行符。readLine()

因此,您必须查找文字后跟文字(为什么?\n.

因此,您必须为正则表达式编译器提供个反斜杠,并且您必须为Java编译器对它们进行一次转义。总计:四个。

或者,您只是在尝试不可能的事情,尝试在不存在的换行符上进行拆分。也许输入已经通过调用来充分拆分readLine()?