我对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));
}
}
字符串
3条答案
按热度按时间bpsygsoo1#
当我问你:“嘿,这个词包含a,e,i,o还是u”你知道我的意思。但我的问题实际上并不清楚,你只是把一生的人类知识和一些同理心应用到这种情况中(你站在我的立场上,弄清楚人们可能会问什么样的问题,并把它作为理解我的意思的过程的一部分)。
计算机不是这样的。他们需要被精确地告知该做什么,并且会精确地按照你说的去做,不管它有多愚蠢。Here is a youtube video一个爸爸让他的孩子写下花生酱和果冻三明治的食谱,他完全按照它做(当然,结果是灾难性的滑稽)。编程就是这样的。
因此,这:
if (nome.contains('a','e','i','o','u')) {
不工作-它甚至没有意义。你是问它是否包含至少一个这些字母?所有人?通常的解决方案是--好吧,它是一种编程语言--对它进行编程。与其寻找一个能完全满足您需要的“方法”,不如将方法视为非常简单的动词。没有动词表示“把米饭煮8分钟”。有一个动词表示“烹饪”。你可以用一些附加的词来表示'.. 8分钟”。没有一个动词能准确地表达“煮8分钟”的意思。我也是。没有一种方法。编写代码来执行您想要的操作:
字符串
额外的复杂性是'动词'“.contains(someChar)”不存在,只有“.contains(someString)”存在,因此将
vocali
数组更改为String[]
类型,并使用双引号来解决这个问题。或者使用.indexOf(someChar) > -1
(indexOf does 有一个作用于字符的重载)。使用stream API也可以:
型
这要求您按字母顺序编写
vocali
(二进制搜索要求您正在搜索的数组已排序)。我假设你还没有在你的课程中介绍过lambda(也称为闭包),所以你可能想以后再讨论anyMatch
。jhiyze9q2#
字符串
yhqotfr83#
您应该避免一次一个字符地循环遍历字符串。这是容易出错的,不是最佳的方式来做到这一点。
相反,您可以使用“正则表达式”,这是一个具有自己语法的字符串匹配框架。它在许多不同的语言中使用,包括Java。
为了快速了解,你可以看看这个:https://www.w3schools.com/java/java_regex.asp
它是一种非常强大且广泛使用的字符串匹配技术,根据您的需要,它具有许多不同的功能。
对于您的特定示例,匹配可以这样完成:
字符串
有许多在线测试器,您可以在其中尝试正则表达式。例如,您可以查看以下内容:https://regex101.com/的
编码愉快。:—)