gpt4 book ai didi

java - 计算两个辅音之间包含的元音

转载 作者:行者123 更新时间:2023-11-29 06:35:04 25 4
gpt4 key购买 nike

我试图从一个句子中使用 java 查找在两个 r 之间包含两个元音的单词。所以我读了这个句子,然后我必须找到符合上述标准的单词。例如,如果我有一个字符串,例如:“roar soccer roster reader”,方法 matches 应该为单词“roar”和“roster”返回 true

这是我想出的方法,就是干活

public boolean matches(String singleWord)
{
// set count to -1. it will increase to 2 if a 'r' is found, it decreases for each vowel
int count = -1;
// loop through a single word
for (int i=0; i<singleWord.length(); i++){
// if a 'r' is found set the count to two
if(singleWord.charAt(i) == 'r'){
// when count it's 0 exit loop
if (count == 0)
return true;
count = 2;}
// if I find a vowel count decreases
else if(isVowel(singleWord.charAt(i))){
count--;}
}
return false;
}

但它似乎有点笨拙...关于如何改进它或使其更简单的任何建议?谢谢!!!

以防万一,这是 isVowel 方法

  private boolean isVowel(char c)
{
String s = c + "";
return "aeiou".contains(s);
}

最佳答案

您可以使用没有循环的简单算法来做到这一点:

  • 找到第一个'r'的索引
  • 找到最后一个'r'的索引
  • 截取两者之间的子串
  • 如果从子字符串中删除所有元音字母至少将其缩短两个字符,则返回 true

以下是实现它的方法:

boolean matches(String singleWord) {
int from = singleWord.indexOf('r');
int to = singleWord.lastIndexOf('r');
if (from < 0 || from == to) return false;
String sub = singleWord.substring(from+1, to);
return (sub.length() - sub.replaceAll("[aeiou]", "").length()) == 2;
}

以下是它的工作原理,以单词 “roadster” 为例:

  • 从 = 0到 = 7
  • sub = "oadste";长度为 6
  • sub 替换后为"dst";长度为 3
  • 表达式 (6 - 3) == 2 是 3,而不是 2,因此返回 false

编辑:序列必须恰好包含两个元音,中间没有'r'

这使得问题略有不同,因为第一个和最后一个索引的技巧不再适用。然而,可以相对容易地构建匹配所需序列的正则表达式 - 这里是:

"r[^raeiou]*[aeiou][^raeiou]*[aeiou][^raeiou]*r"

为了理解这个正则表达式,您只需要知道 [...] 匹配方括号内的任何字符,[^...] 匹配任何除括号中的字符外的字符,并且 * 与前面的子表达式匹配零次或多次。

表达式很长,但它是由琐碎的片段组成的。匹配如下:

  • 初始r
  • 除了 r
  • 之外的零个或多个非元音字母
  • 第一个元音
  • 除了 r
  • 之外的零个或多个非元音字母
  • 第二元音
  • 除了 r
  • 之外的零个或多个非元音字母
  • 结束r

这是一个简单的实现:

boolean matches(String singleWord) {
return singleWord
.replaceAll("r[^raeiou]*[aeiou][^raeiou]*[aeiou][^raeiou]*r", "")
.length() != singleWord.length();
}

关于java - 计算两个辅音之间包含的元音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22505414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com