在Java中被split(),indexOf()和regex混淆

时间:2015-03-31 11:30:02

标签: java regex split indexof

我用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”替换竖条,则不会返回正确的列和行值。有人能帮我理解我做错了吗?

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

1 个答案:

答案 0 :(得分:0)

如果我理解正确,columns的值为-1,rows的值为1而不是您期望的值。

indexOf(x)如果无法找到x,则返回-1。您正在以错误的方式寻找换行符

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

这是一个反斜杠问题。如果您有String n = "\n"之类的字符串,则会将其视为特殊值换行符。如果您有另一个包含\n字符串序列的字符串,则换行符不匹配。

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

简而言之,如果你把所有反斜杠加倍,它应该可以工作。