java - 关键字的过滤字符串
问题描述
我有一个switch
匹配不同的关键字长度。它在 Java 中不起作用:例如,给定一个 string class
,具有确切的字符代码 U+63、U+6c、U+61、U+73 和 U+73 并且长度 = 5, str != "class"
。
private Token filterKeyword(String str)
{
switch (str.length())
{
case 1:
return null;
case 2:
return str == "as" ? Token.AS :
str == "do" ? Token.DO :
str == "if" ? Token.IF :
str == "in" ? Token.IN :
str == "is" ? Token.IS : null;
case 3:
return str == "for" ? Token.FOR :
str == "new" ? Token.NEW :
str == "try" ? Token.TRY :
str == "use" ? Token.USE :
str == "var" ? Token.VAR : null;
case 4:
if (str == "true")
{
token.booleanValue = true;
return Token.BOOLEAN_LITERAL;
}
return str == "case" ? Token.CASE :
str == "else" ? Token.ELSE :
str == "null" ? Token.NULL_LITERAL :
str == "this" ? Token.THIS_LITERAL :
str == "void" ? Token.VOID :
str == "with" ? Token.WITH : null;
case 5:
if (str == "false")
{
this.token.booleanValue = false;
return Token.BOOLEAN_LITERAL;
}
if (str == "class")
{
System.out.println("class");
}
for (int i = 0; i != 5; ++i)
{
System.out.println(str.codePointAt(i));
}
return str == "break" ? Token.BREAK :
str == "catch" ? Token.CATCH :
str == "class" ? Token.CLASS :
str == "const" ? Token.CONST :
str == "super" ? Token.SUPER :
str == "throw" ? Token.THROW :
str == "while" ? Token.WHILE :
str == "yield" ? Token.YIELD : null;
case 6:
return str == "delete" ? Token.DELETE :
str == "import" ? Token.IMPORT :
str == "public" ? Token.PUBLIC :
str == "return" ? Token.RETURN :
str == "switch" ? Token.SWITCH :
str == "typeof" ? Token.TYPEOF : null;
case 7:
return str == "default" ? Token.DEFAULT :
str == "finally" ? Token.FINALLY :
str == "package" ? Token.PACKAGE :
str == "private" ? Token.PRIVATE : null;
case 8:
return str == "continue" ? Token.CONTINUE :
str == "function" ? Token.FUNCTION :
str == "internal" ? Token.INTERNAL : null;
case 9:
return str == "interface" ? Token.INTERFACE :
str == "protected" ? Token.PROTECTED : null;
case 10:
return str == "instanceof" ? Token.INSTANCEOF : null;
default:
return null;
}
}
在case 5:
,我已经调试过这样的:
if (str == "class")
{
System.out.println("class"); // not traced!
}
// prints the right character code sequence
for (int i = 0; i != 5; ++i)
{
System.out.println(str.codePointAt(i));
}
解决方案
推荐阅读
- javascript - 多选标签以在纯 JavaScript 中过滤卡片或图像
- node.js - 如何在猫鼬中返回与一个特定键值相关的多个值?
- android - AnimatedVisibility 和 SwipeToDismiss Enter 动画不会触发 - Jetpack Compose
- php - 从 PHP 发送时未收到 APNS 推送通知。我该如何调试这个问题?
- sql-server - 当我尝试执行包时,SQL Server 中的集成服务评估期已过期
- macos - SwiftUI 和 macOS:如何检测关闭的最后一个窗口并显示应用程序将退出的警报
- html - 在 div 中放置按钮
- django - 在本地机器上,django 项目在哪个服务器上运行?
- amazon-web-services - 是否可以从 EventBridge 事件数据中提取“instanceId”,并将其用作目标值?
- html - Django,用户可以更新电子邮件和用户名,但不能更新图像