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

问题描述 投票:0回答:1

我对 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));
    }
}
java if-statement parameters contains
1个回答
1
投票

当我问你:“嘿,这个单词包含 a、e、i、o 或 u”时,你知道我的意思。但我的问题实际上并不清楚,你只需将一生的人类知识应用于这种情况和一些同理心(你站在我的立场上,弄清楚人们可能会问什么样的问题,并将其作为理解什么的过程的一部分)我是说)。

计算机不是那样的。他们需要被准确地告知要做什么,并且会准确地执行您所说的,无论多么愚蠢。 这是一个 YouTube 视频,一位父亲要求他的孩子们写下花生酱和果冻三明治的食谱,他完全按照它去做(当然,结果是灾难性的搞笑结果)。 编程就是这样

因此,这个:

if (nome.contains('a','e','i','o','u')) {
不起作用——它甚至没有意义。您是在问它是否至少包含其中 1 个字母吗?都是吗?

通常的解决方案是 - 嗯,它是一种编程语言 - 对其进行编程。不要寻找一个完全符合您要求的“方法”,而应将方法视为非常简单的动词。没有动词表示“把米饭煮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 有一个适用于字符的重载)。

使用流 API,这也可以工作:

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

这要求您按字母顺序编写

vocali
(二分搜索要求您正在搜索的数组已排序)。我假设您在课程中还没有介绍过 lambda(也称为闭包),因此您可能想在稍后忘记这些
anyMatch
内容。

© www.soinside.com 2019 - 2024. All rights reserved.