java 检查参数是否包含字符串中的元音

htrmnn0y  于 2023-08-02  发布在  Java
关注(0)|答案(3)|浏览(90)

我对Java还是个新手。我试图检查一个给定的参数是否包含元音,如果是,返回一个单词。这是我到目前为止所拥有的:

public class Main {
    public static void main(String[] args) {
        String nome = "Leonardo";
        int lunghezza = nome.length();
        char[] vocali = {'a', 'e', 'i', 'o', 'u'};  
        System.out.println("Lunghezza parola: " + lunghezza);
            
        if (lunghezza > 5) {
            System.out.println("E' una parola piu' lunga di 5 lettere");
        } else if (lunghezza < 5) {
            System.out.println("E' una parola piu' corta di 5 lettere");
        }
        
        if (nome.contains('a','e','i','o','u')) {
            System.out.println("Contiene vocali");
        }

        //System.out.println(nome.contains(vocali));
    }
}

字符串

bpsygsoo

bpsygsoo1#

当我问你:“嘿,这个词包含a,e,i,o还是u”你知道我的意思。但我的问题实际上并不清楚,你只是把一生的人类知识和一些同理心应用到这种情况中(你站在我的立场上,弄清楚人们可能会问什么样的问题,并把它作为理解我的意思的过程的一部分)。
计算机不是这样的。他们需要被精确地告知该做什么,并且会精确地按照你说的去做,不管它有多愚蠢。Here is a youtube video一个爸爸让他的孩子写下花生酱和果冻三明治的食谱,他完全按照它做(当然,结果是灾难性的滑稽)。编程就是这样的
因此,这:if (nome.contains('a','e','i','o','u')) {不工作-它甚至没有意义。你是问它是否包含至少一个这些字母?所有人?
通常的解决方案是--好吧,它是一种编程语言--对它进行编程。与其寻找一个能完全满足您需要的“方法”,不如将方法视为非常简单的动词。没有动词表示“把米饭煮8分钟”。有一个动词表示“烹饪”。你可以用一些附加的词来表示'.. 8分钟”。没有一个动词能准确地表达“煮8分钟”的意思。我也是。没有一种方法。编写代码来执行您想要的操作:

boolean found = false;
for (String vocale : vocali) {
  if (nome.contains(vocale)) {
    found = true;
    break;
  }
}

if (found) {
  System.out.println("Contiene vocali");
}

字符串
额外的复杂性是'动词'“.contains(someChar)”不存在,只有“.contains(someString)”存在,因此将vocali数组更改为String[]类型,并使用双引号来解决这个问题。或者使用.indexOf(someChar) > -1(indexOf does 有一个作用于字符的重载)。
使用stream API也可以:

boolean found = nome.chars()
  .anyMatch(c -> Arrays.binarySearch(vocali, c) > -1);


这要求您按字母顺序编写vocali(二进制搜索要求您正在搜索的数组已排序)。我假设你还没有在你的课程中介绍过lambda(也称为闭包),所以你可能想以后再讨论anyMatch

jhiyze9q

jhiyze9q2#

String nome = "Leonardo";
        int lunghezza = nome.length();
        char[] vocali = {'a', 'e', 'i', 'o', 'u'};
        System.out.println("Lunghezza parola: " + lunghezza);

        if (lunghezza > 5) {
            System.out.println("E' una parola piu' lunga di 5 lettere");
        } else if (lunghezza < 5) {
            System.out.println("E' una parola piu' corta di 5 lettere");
        }
        //check whether a single character contains in nome
        if (nome.contains("e")) {
            System.out.println("Contiene vocali");
        }

字符串

yhqotfr8

yhqotfr83#

您应该避免一次一个字符地循环遍历字符串。这是容易出错的,不是最佳的方式来做到这一点。
相反,您可以使用“正则表达式”,这是一个具有自己语法的字符串匹配框架。它在许多不同的语言中使用,包括Java。
为了快速了解,你可以看看这个:https://www.w3schools.com/java/java_regex.asp
它是一种非常强大且广泛使用的字符串匹配技术,根据您的需要,它具有许多不同的功能。
对于您的特定示例,匹配可以这样完成:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String nomo = "Leonardo";

        // Create a regex pattern which matches any of the listed vowels:
        Pattern pattern = Pattern.compile("[aeiou]", Pattern.CASE_INSENSITIVE);

        // Create a matcher which checks the pattern with the provided name:
        Matcher matcher = pattern.matcher(nomo);

        // Check if we have a match:
        boolean matchFound = matcher.find();
        if (matchFound) {
            System.out.println('Contiene vocali');
        }
    }
}

字符串
有许多在线测试器,您可以在其中尝试正则表达式。例如,您可以查看以下内容:https://regex101.com/
编码愉快。:—)

相关问题