当我尝试比较斜杠时,为什么 java 无法识别字符比较?
Why would java won't recognize a character comparision when I try to compare a slash?
我正在尝试为一种新语言做一个 Java 解释器,为此我需要标记每个字符。我发现 Jasic 是在 Java 中开发的已经开发的解释器,所以我将其用作指南。对于分词器,我正在尝试更改定义字符为注释的 if
语句。这是代码:
public static List<Token> tokenize(String source) {
List<Token> tokens = new ArrayList<Token>();
int n=0;
String token = "";
TokenizeState state = TokenizeState.DEFAULT;
// Many tokens are a single character, like operators and ().
String charTokens = "\n=+-*/<>()";
TokenType[] tokenTypes = { TokenType.LINE, TokenType.EQUALS,
TokenType.OPERATOR, TokenType.OPERATOR, TokenType.OPERATOR,
TokenType.OPERATOR, TokenType.OPERATOR, TokenType.OPERATOR,
TokenType.LEFT_PAREN, TokenType.RIGHT_PAREN
};
// Scan through the code one character at a time, building up the list
// of tokens.
for (int i = 0; i < source.length(); i++) {
char c = source.charAt(i);
switch (state) {
case DEFAULT:
if (charTokens.indexOf(c) != -1) {
tokens.add(new Token(Character.toString(c),
tokenTypes[charTokens.indexOf(c)]));
} else if (Character.isLetter(c)) {
token += c;
state = TokenizeState.WORD;
} else if (Character.isDigit(c)) {
token += c;
state = TokenizeState.NUMBER;
} else if (c == '"') {
state = TokenizeState.STRING;
} else if (c == '/'){ // This comparision won't work
state = TokenizeState.COMMENT;
}
/* This is how is handled by Jasic
that uses a single quote for comments
else if (c == '\'') {
state = TokenizeState.COMMENT;
}*/
break;
case WORD:
// Here is more code, but not relevant for this question
}
我什至已经尝试比较字符和类型的哈希码,我也尝试使用 Character.valueOf(c)
只获取值并比较它,如下所示:Character.valueOf(c) == '/'
但没有任何效果。
我搜索了答案,但所有内容都与反斜杠有关。所以,我的问题是,您知道它为什么不起作用吗?或者我做错了什么 if
语句不接受比较?
/
是除法运算符,根据 charTokens
和 tokenTypes
变量。
这意味着它已经被 charTokens.indexOf(c) != -1
测试处理过,因此 c
在那个 else if
语句中永远不会是 /
。
此外,/
不是评论的开始。 //
是。
我正在尝试为一种新语言做一个 Java 解释器,为此我需要标记每个字符。我发现 Jasic 是在 Java 中开发的已经开发的解释器,所以我将其用作指南。对于分词器,我正在尝试更改定义字符为注释的 if
语句。这是代码:
public static List<Token> tokenize(String source) {
List<Token> tokens = new ArrayList<Token>();
int n=0;
String token = "";
TokenizeState state = TokenizeState.DEFAULT;
// Many tokens are a single character, like operators and ().
String charTokens = "\n=+-*/<>()";
TokenType[] tokenTypes = { TokenType.LINE, TokenType.EQUALS,
TokenType.OPERATOR, TokenType.OPERATOR, TokenType.OPERATOR,
TokenType.OPERATOR, TokenType.OPERATOR, TokenType.OPERATOR,
TokenType.LEFT_PAREN, TokenType.RIGHT_PAREN
};
// Scan through the code one character at a time, building up the list
// of tokens.
for (int i = 0; i < source.length(); i++) {
char c = source.charAt(i);
switch (state) {
case DEFAULT:
if (charTokens.indexOf(c) != -1) {
tokens.add(new Token(Character.toString(c),
tokenTypes[charTokens.indexOf(c)]));
} else if (Character.isLetter(c)) {
token += c;
state = TokenizeState.WORD;
} else if (Character.isDigit(c)) {
token += c;
state = TokenizeState.NUMBER;
} else if (c == '"') {
state = TokenizeState.STRING;
} else if (c == '/'){ // This comparision won't work
state = TokenizeState.COMMENT;
}
/* This is how is handled by Jasic
that uses a single quote for comments
else if (c == '\'') {
state = TokenizeState.COMMENT;
}*/
break;
case WORD:
// Here is more code, but not relevant for this question
}
我什至已经尝试比较字符和类型的哈希码,我也尝试使用 Character.valueOf(c)
只获取值并比较它,如下所示:Character.valueOf(c) == '/'
但没有任何效果。
我搜索了答案,但所有内容都与反斜杠有关。所以,我的问题是,您知道它为什么不起作用吗?或者我做错了什么 if
语句不接受比较?
/
是除法运算符,根据 charTokens
和 tokenTypes
变量。
这意味着它已经被 charTokens.indexOf(c) != -1
测试处理过,因此 c
在那个 else if
语句中永远不会是 /
。
此外,/
不是评论的开始。 //
是。