我用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 ########### *“。它有两个反斜杠,而不是一个(这就是我输入它的方式)。这可能是个问题吗?
答案 0 :(得分:0)
如果我理解正确,columns
的值为-1,rows
的值为1而不是您期望的值。
indexOf(x)
如果无法找到x,则返回-1。您正在以错误的方式寻找换行符
行的值1表示未执行拆分,因此您要拆分的字符也不应该是它应该是。
这是一个反斜杠问题。如果您有String n = "\n"
之类的字符串,则会将其视为特殊值换行符。如果您有另一个包含\n
字符串序列的字符串,则换行符不匹配。
对于正在转义特殊字符的正则表达式,再次必须转义反斜杠。
简而言之,如果你把所有反斜杠加倍,它应该可以工作。