使用myString.split时出现问题(" \ n");

时间:2015-04-27 03:15:55

标签: java string io split newline

我需要将输入字符串分成许多部分。分裂应发生在" \ 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

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

2 个答案:

答案 0 :(得分:17)

如果您从字面上输入\n(即与换行符相对),则需要按如下方式分割:

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

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

答案 1 :(得分:1)

您通过readLine()阅读的文字中没有任何换行符。

Ergo 你必须寻找文字\后跟文字n.(为什么?)

Ergo 您必须为正则表达式编译器提供两个反斜杠,并且您必须为Java编译器分别转义它们。总计:四。

或者你只是在尝试不可能的事情,试图拆分不存在的换行符。也许仅通过调用readLine()?

就可以充分分割输入