我使用了此代码:
System.out.println("Enter a sentence :");
Scanner sc = new Scanner(System.in);
String sentence = sc.nextLine();
for (int i= 0; i < sentence.length(); i ++) {
char ch = sentence.charAt(i);
if (ch != 'a' || ch !='e' || ch !='i' || ch != '0' || ch != 'u' ) {
String sentence_edited = sentence.replace(i,"");
}
}
System.out.println(sentence_edited);
但它给出了一个compilationerror
.。我可以修复它?编译器清楚地告诉您,the的方法签名不匹配,因为您试图通过索引
replace()
String
inde in index下的字符。
注意,期望两个字符值的
i
方法的版本对该任务没有用。因为它的意图是将一个具有另一个字符的角色重新定位,并且您无法将其从字符串中删除任何字符。但这不是您的代码唯一问题。
条件不正确。您应该在此处使用逻辑
replace(char, char)
或ch != 'a' || ch !='e' || ch !='i'... etc.
。
可变性
&&
仅存在于定义的范围范围内。并且在循环中应用||
没有任何意义,因为sentence_edited
保持不变(
reminder:strings在java中是可iMmut的)。即使您会重新分配变量
if
,它也会弄乱迭代顺序,并且会得到不正确的结果。
这里是解决这个问题的更好方法。replaceAll()您可以通过使用
sentence.replace(String.valueOf(ch),"")
方法来删除除元音以外的所有字符:
sentence
this方法期望trigular表达式作为第一个参数(有关正则表达式的更多信息,请查看此教程
)) StringBuilder&Set 如果由于某种原因,您需要将循环用于此目的,则可以定义包含所有元音或
sentence
replaceAll()
String sentence = sentence.replaceAll("[^aeiou]", "");
String
轻松地将其转换为StringBuilder
。
String
有两个变体:
toString()
String sentence = sc.nextLine();
StringBuilder sentenceEdited = new StringBuilder();
String vowels = "aeiou"; // or Set<Character> vowels = Set.of('a', 'e', 'i', 'o', 'u');
for (int i= 0; i < sentence.length(); i++) {
char ch = sentence.charAt(i);
if (vowels.contains(String.valueOf(ch))) {
sentenceEdited.append(ch);
}
}
System.out.println(sentenceEdited);
您的代码试图调用类似String.replace
的东西,但是这种方法不存在。 字符串没有替换位置n的方法。我建议您先将
String String.replace(char, char)
放入一个String String.replace(CharSequence, CharSequence)
,然后使用String.replace(int, CharSequence)
。最后,您用它的char
方法从清洁
String
嗯...这是您的代码,很少。您需要检查我们是否正在处理任何元音(== == =),也不需要其他字符串。
StringBuilder