Java中使用contains方法判断Tokenizer获取的Token是否在全局数组中失败
解决Java数组无法使用contains()判断元素存在的问题
嘿,我来帮你搞定这个问题!你遇到的核心问题是:Java原生的数组(比如你的String[] keys)并没有内置的contains()方法,所以直接调用keys.keys.contains(...)肯定会报错或者不生效,这就是问题的根源。
下面给你几种实用的解决方案,按需选择:
方案1:把数组转成List,利用List的contains()方法
Java的Arrays工具类提供了asList()方法,可以快速把数组转换成一个固定大小的List,这样就能用List自带的contains()方法判断元素是否存在了。不过要注意一个小坑:不要重复调用tokenizer.nextToken(),因为每次调用都会获取下一个Token,会导致你跳过本该判断的内容,所以先把Token存到变量里再判断。
示例代码:
import java.util.Arrays; // 先获取当前Token并保存 String currentToken = tokenizer.nextToken(); // 转换数组为List后判断 if (Arrays.asList(keys.keys).contains(currentToken)) { // 当Token存在于数组中时的逻辑 System.out.println("找到匹配的Token:" + currentToken); }
方案2:用HashSet优化频繁判断的场景
如果你的代码需要频繁进行这种存在性判断,用HashSet会比List效率更高(HashSet的contains()是O(1)时间复杂度,List是O(n))。你可以在keys类里直接初始化一个静态的HashSet,后续直接用它判断即可:
示例代码:
import java.util.HashSet; import java.util.Arrays; import java.util.Set; class keys { public static final String[] keys = new String[]{ "LDA", "MUL" }; // 初始化静态HashSet,只需要执行一次 public static final Set<String> KEYS_SET = new HashSet<>(Arrays.asList(keys)); } // 使用时的判断逻辑 String currentToken = tokenizer.nextToken(); if (keys.KEYS_SET.contains(currentToken)) { // 存在时的处理逻辑 }
方案3:手动遍历数组判断
如果你不想引入集合类,也可以自己手动遍历数组进行判断,逻辑也很简单:
示例代码:
String currentToken = tokenizer.nextToken(); boolean isTokenInKeys = false; // 遍历数组逐个比较 for (String key : keys.keys) { // 注意用equals()比较字符串内容,不要用==(==比较的是对象引用) if (key.equals(currentToken)) { isTokenInKeys = true; break; // 找到匹配后直接跳出循环,提升效率 } } if (isTokenInKeys) { // 存在时的处理逻辑 }
小提醒
不管用哪种方案,都要记得先获取一次Token并保存到变量,不要在if条件里直接写tokenizer.nextToken()——因为每次调用这个方法,Tokenizer都会移动到下一个Token,会导致你漏掉或者错误判断Token。
内容的提问来源于stack exchange,提问作者Matt Geraghty
相关产品推荐
相关产品推荐

