如何编写返回包含数组全部元素的字符串的方法(仅用for循环及字符串方法)
问题解答
完全可以只用for循环和字符串方法实现这个需求,但你当前的代码存在几个关键问题,无法达成目标:
- 逻辑偏差:你的代码只要字符串包含任意一个目标单词就会拼接,但需求是要包含所有指定单词才符合条件
- 变量未声明:
numStrings没有作为方法参数传入,直接使用会导致编译错误 - 重复拼接:如果一个字符串包含多个目标单词,会被多次拼接到结果里
以下是修正后的代码,严格基于for循环和字符串方法实现:
// 将需要检查的目标字符串数组作为参数传入,保证方法的独立性 public String filterStringsWithAllWords(String[] targetStrings, String[] requiredWords) { String result = ""; // 遍历每个待检查的字符串 for (int i = 0; i < targetStrings.length; i++) { String currentStr = targetStrings[i]; // 跳过null值,避免空指针异常 if (currentStr == null) { continue; } // 标记当前字符串是否包含所有必填单词 boolean meetsRequirement = true; // 遍历所有必填单词,逐一检查 for (int j = 0; j < requiredWords.length; j++) { String word = requiredWords[j]; // 只要有一个单词不包含,就标记为不符合,跳出内层循环 if (!currentStr.contains(word)) { meetsRequirement = false; break; } } // 仅当包含所有单词时,才将该字符串拼接到结果中 if (meetsRequirement) { result += currentStr; // 可根据需求添加分隔符,比如:result += currentStr + " | "; } } return result; }
代码说明:
- 新增
targetStrings参数对应你代码中的numStrings,确保方法可以独立调用 - 用
meetsRequirement布尔变量跟踪当前字符串是否满足条件,避免重复拼接 - 内层循环一旦发现不包含某个单词,立即跳出循环,减少不必要的检查
可选优化(仍基于基础方法):
字符串拼接+=每次都会创建新的字符串对象,效率较低。可以改用StringBuilder(属于Java基础字符串相关工具类,仍符合要求)来优化:
public String filterStringsWithAllWords(String[] targetStrings, String[] requiredWords) { StringBuilder resultBuilder = new StringBuilder(); for (int i = 0; i < targetStrings.length; i++) { String currentStr = targetStrings[i]; if (currentStr == null) { continue; } boolean meetsRequirement = true; for (int j = 0; j < requiredWords.length; j++) { if (!currentStr.contains(requiredWords[j])) { meetsRequirement = false; break; } } if (meetsRequirement) { resultBuilder.append(currentStr); // 可选添加分隔符:resultBuilder.append("\n"); } } return resultBuilder.toString(); }
内容的提问来源于stack exchange,提问作者Orwellian
相关产品推荐
相关产品推荐

