对 Java 中的 split()、indexOf() 和正则表达式感到困惑

Confused by split(), indexOf() and regex in Java

我在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

这是一个有效的字符串示例:

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

如果我用“\n”替换竖线,它不会return列和行的正确值。有人可以帮助我了解我做错了什么吗?

编辑:我不知道这是否相关,但是当我 运行 调试器时,使用换行符的字符串的值为“####### ####\\n# #\\n# ... ... #\\n# $$ $.$ #\\n# $ +$ $*$$ #\\n# $$ $.$ #\\n# ... . #\\n# #\\n###### #####*”。它有两个反斜杠,而不是一个(这是我输入的方式)。这会是个问题吗?

如果我没理解错的话,columns 的值为 -1 而 rows 的值为 1,而不是你所期望的值。

indexOf(x) returns -1 如果找不到 x。您正在以错误的方式寻找换行符

行的值为 1 表示未执行拆分,因此您要拆分的字符也不是应该的字符。

这是反斜杠问题。如果你有一个像 String n = "\n" 这样的字符串,它将被视为特殊值 newline。如果你有另一个包含 \n 作为文字字符序列的字符串,newline 将不匹配。

对于要转义特殊字符的正则表达式,您必须再次转义反斜杠。

长而短,如果将所有反斜杠都加倍,应该可以。