如何正确初始化字符串数组并使用indexOf检测用户输入内容?
问题解决方法
你的代码有两个核心问题导致无法触发提示:
1. 字符串数组初始化错误
你当前的数组把三个单词放在了同一个字符串元素里:
String[] strAr = {"hallow,world,thanks"};
这意味着数组只有1个元素,内容是带逗号的完整字符串,而不是3个独立的目标单词。正确的初始化应该是每个单词作为单独的数组元素:
String[] strAr = {"hallow", "world", "thanks"};
2. 错误地将数组直接转为字符串匹配
String.valueOf(strAr)并不会把数组里的元素拼接成可匹配的字符串,它返回的是数组的类名+哈希值(比如[Ljava.lang.String;@456789),这种值不可能出现在用户输入里,所以indexOf永远返回-1。
正确的做法是遍历数组中的每个单词,逐个检查用户输入是否包含该单词:
完整修正代码示例
// 正确初始化目标单词数组 String[] strAr = {"hallow", "world", "thanks"}; // 将用户输入统一转为小写,实现大小写不敏感匹配 String userInput = string.toLowerCase(); // 遍历数组中的每个目标单词 for (String targetWord : strAr) { if (userInput.indexOf(targetWord.toLowerCase()) != -1) { Toast.makeText(getApplicationContext(), "hi new world", Toast.LENGTH_SHORT).show(); // 匹配到一个后跳出循环,避免重复弹出提示 break; } }
额外优化建议
如果目标单词数量较多,或者需要更精准的单词匹配(比如避免部分匹配,如输入"thanksgiving"误触发"thanks"),可以将用户输入按空格拆分为单词数组,再用HashSet存储目标单词,通过contains方法直接匹配:
HashSet<String> targetWords = new HashSet<>(Arrays.asList(strAr)); String[] inputWords = userInput.split("\\s+"); for (String word : inputWords) { if (targetWords.contains(word)) { Toast.makeText(getApplicationContext(), "hi new world", Toast.LENGTH_SHORT).show(); break; } }
内容的提问来源于stack exchange,提问作者shohel hossain
相关产品推荐
相关产品推荐

