java将一个字符与一个字符数组进行比较?
package loopPractice;
import java.util.Scanner;
public class replaceVowels {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
System.out.print("Enter a string: ");
String s = sc.nextLine();
String originalString = s;
char[] vowels = {'a', 'e', 'i', 'o', 'u'};
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c.equals(vowels[i])){
String front = s.substring(0, i);
String back = s.substring(i + 1);
s = front + "" + back;
}
}
System.out.println(originalString);
System.out.println(s);
}
}
这项工作是替换一个单词中的所有元音,如何使用元音数组替换每个元音
问题是:编写一个返回字符串的方法,该字符串是字符串参数的副本,但不包含任何元音
# 1 楼答案
阅读:匹配所有未跟随((?!…)的元音([aeiou])通过“词尾”(\b)。有关更多信息,请阅读
java.util.regex.Pattern;
上的Javadoc更简单的是这个(等效但更简单的)正则表达式:
# 2 楼答案
根据你问题的精神,你可以编写一个新函数来检查数组是否包含字符:
# 3 楼答案
这段代码有三大问题
首先,不能在
char
上使用equals
,因为char
是一种基本类型。使用==
其次,你没有正确地检查元音。上面的代码将“s”的第0个字符与元音数组中的第0个字符进行比较;也就是说,它将它与
'a'
进行比较,但不与任何其他元音进行比较。同样,它将索引1处的字符与'e'
进行比较,但不比较任何其他元音,将索引2处的字符与'i'
进行比较,等等。;当你到达索引5时,程序会抛出一个异常,因为vowels
没有那么大解决方案是需要一个双循环(或嵌套循环)。对于
s
中的每个字符,您需要对照vowels
数组中的每个字符进行检查(或者至少在匹配之前)。所以你需要像正如@cptcactus在他的回答中所展示的,将内部循环移动到一个新方法是实现这种解决方案的一个好方法
第三个问题更微妙。在数组或字符串中循环索引时,如果循环从数组或字符串中删除元素,则必须非常小心,因为索引会移动。假设您的代码大致做到了这一点:
说
s
是"air"
。第一个i
被设置为0,而s.charAt(i)
是'a'
。这是一个元音,所以我们去掉它。这意味着s
现在是"ir"
。然后我们循环并将i
设置为1。现在s.charAt(i)
是'r'
,因为它使用了s
的新值,而且它从不看元音'i'
解决这个问题的两种方法是:
如果从
i
中删除字符,请确保i
不会递增(可以使用i
来抵消i++
)向后遍历索引(即以
s.length()-1
和减量开头),而不是向前(还有其他方法可以解决这个问题,通过使用
replaceAll
方法或Set<Character>
,但我假设这是一个类,您的目的是学习循环等的基础知识。)