Подтвердить что ты не робот

Проблемы с использованием myString.split( "\n" );

Мне нужно разбить входную строку на многие части. Разделения должны иметь место в "\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

Любая помощь очень ценится, спасибо!

4b9b3361

Ответ 1

Если вы введете \n буквально (т.е. в отличие от символа новой строки), вам необходимо разбить его следующим образом:

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

Причиной сложности является то, что split() принимает регулярное выражение в качестве аргумента. При попытке сопоставить буквальную обратную косую черту с использованием регулярного выражения ее необходимо дважды экранировать (один раз для регулярного выражения и один раз для строкового литерала).

Ответ 2

В тексте, который вы читаете через readLine(), не может быть никаких строк в строке.

Эрго, вы должны искать литерал \, за которым следует буква n. (почему?)

Ergo вы должны предоставить две обратные косые черты для компилятора регулярных выражений, и вам придется избегать их как один раз для компилятора Java. Всего: четыре.

В качестве альтернативы вы просто пытаетесь сделать невозможное, пытаясь разделить на линейные переводы, которых там нет. Возможно, вход уже раскололся, просто набрав readLine()?