【问题标题】:Confused by split(), indexOf() and regex in Java对 Java 中的 split()、indexOf() 和正则表达式感到困惑
【发布时间】:2015-03-31 11:30:02
【问题描述】:

我用 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# ... . #\\n# #\\n###########*”。它有两个反斜杠,而不是一个(我是这样输入的)。这会是个问题吗?

【问题讨论】:

  • 不要使用\\n,只使用\n
  • "没有为列和行返回正确的值" 它返回什么值?目前尚不清楚您的代码 cmets 是否与“\n”分隔的示例有关。
  • 字符文字应该用单引号括起来,'\n' != "\n" ?
  • TheLostMind 我试过了,但它仍然给我一个错误。
  • 它不应该.. 你得到什么错误?

标签: java regex split indexof


【解决方案1】:

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

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

rows 的值 1 表示没有执行拆分,因此您要拆分的字符也不是应有的字符。

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

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

长话短说,如果将所有反斜杠加倍,它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 2012-03-14
    • 2016-04-06
    相关资源
    最近更新 更多