Java实现单词元音与辅音交替模式的检测方案咨询
Java检测元音辅音交替模式的可行方案
方案一:正则表达式实现
你之前的正则仅覆盖了元音加辅音的单次匹配,要适配整个单词的交替规则,需要同时支持元音开头和辅音开头两种场景,还要兼容奇数长度的单词。完整正则如下:
String regex = "^([aeiouAEIOU][^aeiouAEIOU])*([aeiouAEIOU])?$|^([^aeiouAEIOU][aeiouAEIOU])*([^aeiouAEIOU])?$";
正则说明:
^和$确保匹配整个单词,避免部分匹配的情况([aeiouAEIOU][^aeiouAEIOU])*匹配元音+辅音的重复组合,对应偶数长度的交替([aeiouAEIOU])?允许末尾多一个元音,处理奇数长度的单词(比如"aba")- 后半段正则对应辅音开头的交替场景,逻辑和前半段一致
使用示例:
import java.util.regex.Pattern; public class AlternateChecker { public static void main(String[] args) { String regex = "^([aeiouAEIOU][^aeiouAEIOU])*([aeiouAEIOU])?$|^([^aeiouAEIOU][aeiouAEIOU])*([^aeiouAEIOU])?$"; Pattern pattern = Pattern.compile(regex); System.out.println(pattern.matcher("abc").matches()); // true System.out.println(pattern.matcher("aab").matches()); // false System.out.println(pattern.matcher("xyza").matches()); // true System.out.println(pattern.matcher("xyz").matches()); // false(全辅音无交替) } }
方案二:手动字符遍历实现
如果觉得正则可读性差,也可以通过遍历字符逐一判断,逻辑更直观:
- 写一个辅助方法判断单个字符是否为元音
- 遍历单词的每个字符,对比当前字符与前一个字符的元音状态,若连续两个都是元音或都是辅音,则不符合规则
代码示例:
public class AlternateChecker { // 判断字符是否为元音 private static boolean isVowel(char c) { return "aeiouAEIOU".indexOf(c) != -1; } public static boolean isAlternating(String word) { // 空字符串或单个字符直接符合条件 if (word == null || word.length() <= 1) { return true; } boolean prevIsVowel = isVowel(word.charAt(0)); for (int i = 1; i < word.length(); i++) { boolean currIsVowel = isVowel(word.charAt(i)); // 连续两个同类型字符,直接返回false if (currIsVowel == prevIsVowel) { return false; } prevIsVowel = currIsVowel; } return true; } public static void main(String[] args) { System.out.println(isAlternating("abc")); // true System.out.println(isAlternating("aab")); // false System.out.println(isAlternating("xyza")); // true System.out.println(isAlternating("xyz")); // false } }
内容的提问来源于stack exchange,提问作者Feracga99
相关产品推荐
相关产品推荐

