2015-03-31 2 views
0

Я написал простую игру на Java, которая может быть инициализирована строкой. Чтобы настроить плату, моя программа разделяет строку на новые строки или вертикальные полосы. Игра отлично работает, если строка использует вертикальные столбцы, но не работает, когда строка использует символы новой строки. Вот код, который я имею проблемы с:Confused by split(), indexOf() и regex в Java

String rowSeparator, indexChar; 
    if(board.indexOf("|") >= 0) { 
     rowSeparator = "\\|"; 
     indexChar = "|"; 
    } else { 
     rowSeparator = "\\n"; 
     indexChar = "\n"; 
    } 
    columns = board.indexOf(indexChar); //this one is set to -1 when the error occurs (\n instead of vertical bars) 
    rows = board.split(rowSeparator).length; //this one is set to 1 

Вот пример строки, которая работает:

"*###########*|#   #|# ... ... #|# *$$ $.$ #|# $*+$ $*$$ #|# *$$ $.$ #|# ... . #|#   #|*###########*" 

Если я заменяю вертикальные полосы с «\ п», это Безразлично 't вернуть правильные значения для столбцов и строк. Может ли кто-нибудь помочь мне понять, что я делаю неправильно?

EDIT: Я не знаю, является ли это актуальным, но когда я запускаю отладчик, значение строки, использующей символы новой строки, равно «########## \\ n # # \\ n # ... ... # \\ n # $$ $. $ # \\ n # $ + $ $ * $$ # \\ n # $$ $. $ # \\ n # .... # \\ n # # \\ n ########### * *. Он имеет две обратные косые черты вместо одного (именно так я вошел в него). Это может быть проблема?

+0

не использовать '\\ n' использовать только' \ n' – TheLostMind

+0

"не возвращает правильные значения для столбцов и строк" какие значения он возвращает? Неясно, относятся ли ваши комментарии к фрагменту «\ n». –

+0

символьные литералы должны быть в одинарных кавычках, '\ n'! = "\ N"? –

ответ

0

Если я вас правильно понимаю, columns имеет значение -1, а rows имеет значение 1 вместо того, что вы ожидаете.

indexOf(x) возвращает -1, если не удается найти x. Вы ищете новую строку не в том направлении

Значение 1 для строк указывает, что никакой сплит не был выполнен, поэтому персонаж, который вы хотите разделить, также не тот, каким он должен быть.

Это проблема обратной косой черты. Если у вас есть строка, такая как String n = "\n", она будет рассматриваться как специальное значение newline. Если у вас есть еще одна String, которая содержит \n в качестве символьной последовательности символов, newline не будет соответствовать.

Для выражения регулярных выражений, в котором вы выбрали специальные символы, снова вам нужно избежать обратных косых черт.

Длинные вещи короткие, он должен работать, если вы удвоите все обратные косые черты.

+0

Спасибо! Это решило мою проблему. –