我是java的初学者,我正在做这个课程需要一些帮助。基本上,用户将输入一个字符串,然后程序将只打印一行上的元音。
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner inp = new Scanner(System.in);
System.out.print("In:");
String word = inp.nextLine();
//write your code below
for(int whatsat = 0; whatsat < word.length(); whatsat++){
if (word.charAt(whatsat).equals("a")){ //how to declare mutiple letters?
System.out.print(word.charAt(whatsat));
}
}
}
}
我同意@Logan。你不使用equals()
来比较原始类型值(int,char,boolean等),只需使用简单的==
表达式。
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner inp = new Scanner(System.in);
System.out.print("In:");
String word = inp.nextLine();
//write your code below
for(int whatsat = 0; whatsat < word.length(); whatsat++){
char c = Character.toLowerCase(word.charAt(whatsat));
if (c == 'a' || c == 'e'|| c == 'i' || c == 'o' || c == 'u'){
System.out.print(word.charAt(whatsat));
}
}
}
}
一个简单的方法(故意避免使用复杂的正则表达式选项)将在循环中使用String.indexOf()
方法。
在下面的例子中,我们基本上检查“AEIOUaeiou”是否包含我们从用户输入中提取的char
。如果是这样,我们提取它:
public static void main(String[] args) {
Scanner inp = new Scanner(System.in);
System.out.print("In:");
String word = inp.nextLine();
//write your code below
// This will hold any matching vowels we find
StringBuilder sb = new StringBuilder();
for (int i = 0; i < word.length(); i++) {
// Check if our list of vowels contains the current char. If the current char exists in the String of vowels, it will have an index of 0 or greater.
if ("AEIOUaeiou".indexOf(word.charAt(i)) > -1) {
// If so, add it to our StringBuilder
sb.append(word.charAt(i));
}
}
// Finally, print the result
System.out.println(sb.toString());
}
结果:
测试输入“这是我的测试输入。它有用吗?”输出是:iieiuiio
所以这里有两个问题:
要比较字符,请执行以下操作:
if (word.charAt(whatsat) == 'a') {
...
}
注意单引号! 'a'
不是"a"
!
如果你问“为什么字符串和字符的比较不同?”,这是一个很好的问题。我其实不知道原因,所以我们都应该研究它。继续。
要检查多个字符:
for(int whatsat = 0; whatsat < word.length(); whatsat++){
if (word.charAt(whatsat) == 'a' || word.charAt(whatsat) == 'e' || word.charAt(whatsat) == 'i'){
System.out.print(word.charAt(whatsat));
}
}
请注意,如果您输入的是大写字母,则需要:
if (...word.charAt(whatsat) == 'A' ...)
长期来看,你会想要像评论中提到的阿德里安那样研究正则表达式。初学者可能会很复杂,但如果你有兴趣,你应该调查一下。
希望这可以帮助。
我真的很惊讶没有人建议使用Enums ...在我看来,最干净的方式和最简单的方式。
只需使用所有元音定义一个枚举,浏览字符串并将每个字符与Enum,ignoring the case中的值进行比较 - 注意char
的演员阵容到String
。如果它存在于枚举中,请将其打印出来。
public class VowelFind {
enum Vowels {
A, E, I, O, U
}
public static void main(String[] args) {
Scanner inp = new Scanner(System.in);
System.out.print("In:");
String word = inp.nextLine();
for (int i = 0; i < word.length(); i++) { //loop through word
for (Vowels v : Vowels.values()) { //loop through Enum values
if((word.charAt(i)+"").equalsIgnoreCase(v.name())) { //compare character to Enum value, ignoring case
System.out.print(word.charAt(i));
}
}
}
}
}
输入:Hello World 输出:eoo
假设你想要一个区分大小写的搜索,那么如何使用正则表达式为你做下面的工作:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Main {
public static void main(String[] args) {
Scanner inp = new Scanner(System.in);
System.out.print("In:");
String word = inp.nextLine();
//write your code below
String vowelRegex = "[aeiouAEIOU]";
Pattern pattern = Pattern.compile(vowelRegex);
Matcher matcher = pattern.matcher(word);
while (matcher.find()){
System.out.println(matcher.group());
}
}
}
如果它不区分大小写,你可以转换单词toLowerCase
并使用正则表达式[aeiou]
。如果你只想要辅音,只需用[^aeiouAEIOU\\s]
(区分大小写)或[^aeiou\\s]
(不区分大小写)替换正则表达式
我更喜欢使用Hashmap,因为查找是O(1)
public class PrintVowelsInWord {
public static Map<Character, Character> vowels;
public static void main(String[] args) {
loadMap();
// for simplicity sake I am not using Scanner code here
getVowels("wewillrockyou");
}
public static void loadMap() {
if (vowels == null) {
vowels = new HashMap<>();
vowels.put('a', 'a');
vowels.put('e', 'e');
vowels.put('i', 'i');
vowels.put('o', 'o');
vowels.put('u', 'u');
}
}
public static void getVowels(String input) {
for (Character letter : input.toCharArray()) {
if (vowels.containsKey(letter)) {
System.out.print(letter);
}
}
}
}