Java实现removeVowels方法遇char类型初始化非法错误求助
修正Java中removeVowels方法的实现错误
原代码的核心错误
- 数组定义错误:原代码将元音列表声明为
char vowels = { ... },单个char变量无法存储多个字符,需改为char[]或Set<Character>。 - 语法误用:错误使用C++的
find()、begin()、end()方法,Java中无此类语法,需用Java原生API判断字符是否为元音。 - 字符串/数组操作错误:试图直接对字符串数组调用
replace(),且逻辑上错误地判断整个字符串是否为元音,而非逐个字符过滤。 - 返回值不匹配:方法声明为
void却返回数组,违反Java语法规则。
修正后的完整代码
U6_L3_Activity_Two类
import java.util.Arrays; import java.util.HashSet; import java.util.Set; public class U6_L3_Activity_Two { public static void removeVowels(String[] words) { // 用Set存储元音,判断字符是否为元音的效率更高 Set<Character> vowels = new HashSet<>(Arrays.asList('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U')); // 遍历数组中的每个字符串 for (String word : words) { StringBuilder filtered = new StringBuilder(); // 逐个检查字符串中的字符 for (char c : word.toCharArray()) { // 非元音字符保留 if (!vowels.contains(c)) { filtered.append(c); } } // 逐行输出过滤后的结果 System.out.println(filtered.toString()); } } }
runner_U6_L3_Activity_Two类(无需修改)
import java.util.Scanner; public class runner_U6_L3_Activity_Two { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("Enter array length:"); int len = scan.nextInt(); scan.nextLine(); String[] wordList = new String[len]; System.out.println("Enter values:"); for(int i = 0; i < len; i++) { wordList[i] = scan.nextLine(); } U6_L3_Activity_Two.removeVowels(wordList); } }
代码说明
- 元音存储:使用
HashSet存储元音字符,contains()方法可在O(1)时间内判断字符是否为元音,比遍历数组更高效。 - 字符过滤:用
StringBuilder拼接非元音字符,避免字符串拼接带来的性能损耗(String为不可变对象,每次拼接都会生成新实例)。 - 输出逻辑:遍历每个字符串,过滤后直接逐行输出,完全符合题目要求。
- 语法合规:方法保持
void类型,无需返回数组(调用方未接收返回值),避免语法错误。
测试示例
输入数组{"every", "nearing", "checking", "food", "stand", "value"},输出结果:
vry nring chckng fd stnd vl
内容的提问来源于stack exchange,提问作者oinkkkk
相关产品推荐
相关产品推荐

