对 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 将不匹配。
对于要转义特殊字符的正则表达式,您必须再次转义反斜杠。
长而短,如果将所有反斜杠都加倍,应该可以。
我在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 将不匹配。
对于要转义特殊字符的正则表达式,您必须再次转义反斜杠。
长而短,如果将所有反斜杠都加倍,应该可以。