检查字符是否是Java中的元音的最佳方法是什么?

我正试图检查某个char是否是元音。 这样做的最佳方法是什么?

这是我已经使用了一段时间的解决方案,它还没让我失望:

 private static String VOWELS = "AÀÁÂÃÄÅĀĂĄǺȀȂẠẢẤẦẨẪẬẮẰẲẴẶḀÆǼEȄȆḔḖḘḚḜẸẺẼẾỀỂỄỆĒĔĖĘĚÈÉÊËIȈȊḬḮỈỊĨĪĬĮİÌÍÎÏIJOŒØǾȌȎṌṎṐṒỌỎỐỒỔỖỘỚỜỞỠỢŌÒÓŎŐÔÕÖUŨŪŬŮŰŲÙÚÛÜȔȖṲṴṶṸṺỤỦỨỪỬỮỰYẙỲỴỶỸŶŸÝ"; private static boolean isVowel(char c) { return VOWELS.indexOf(Character.toUpperCase(c)) >= 0; } 

对于我的应用程序,它的速度相当快。

创建一个switch语句。 例如:

 switch (Character.toLowerCase(foo)) { case 'a': case 'e': case 'i': case 'o': case 'u': case 'y': return true; default: return false; } 

对于Unicode, 如何检测Java字符串中的unicode字符? 按照这里给出的答案然后使用我提供的switch语句。

一种方法是使用if-else或切换案例,如@ TylerWeaver的答案。 如果你想在一行中执行此操作,只需使用正则表达式

像这样的东西:

对于元音:

 aStr.matches("[aeiou]") 

对于辅音:

 aStr.matches("[^aeiou]") 

正则表达式使生活变得非常简单,并且相当容易学习。 看看这张备忘单 。

在这种情况下,您只是创建一个范围[aeiou] ,这意味着您的角色必须匹配aeiou[^aeiou]是除了范围中提到的字符之外的所有字符。

我试图实现这个以涵盖尽可能多的语言,其中包含类似元音的字母。 根据我的统计,有637个Unicode字母可用于计算元音。 我有一个元音类,带有一个静态块,用于设置表示每个元音的字符串HashSet。 我使用一个假设代码点(int)而不是char的方法:

 public class Vowels { public Vowels() { } public static Set vowelStrs; static { vowelStrs = new HashSet(); vowelStrs.add("A"); vowelStrs.add("E"); vowelStrs.add("I"); ... vowelStrs.add("\u00c4"); ... vowelStrs.add("\ua66b"); vowelStrs.add("\ua66c"); vowelStrs.add("\ua66d"); } public boolean isMember(int inChar) { String inStr = new String(Character.toChars(inChar)); return(Vowels.vowelStrs.contains(inStr)); } } 

重复接受的答案,这是一个解决方案,最多需要2个有效的表查找:

 public static boolean isVowel(char c) { switch (c) { case 65: case 69: case 73: case 79: case 85: case 89: case 97: case 101: case 105: case 111: case 117: case 121: case 192: case 193: case 194: case 195: case 196: case 197: case 198: case 200: case 201: case 202: case 203: case 204: case 205: case 206: case 207: case 210: case 211: case 212: case 213: case 214: case 216: case 217: case 218: case 219: case 220: case 221: case 224: case 225: case 226: case 227: case 228: case 229: case 230: case 232: case 233: case 234: case 235: case 236: case 237: case 238: case 239: case 242: case 243: case 244: case 245: case 246: case 248: case 249: case 250: case 251: case 252: case 253: case 255: case 256: case 257: case 258: case 259: case 260: case 261: case 274: case 275: case 276: case 277: case 278: case 279: case 280: case 281: case 282: case 283: case 296: case 297: case 298: case 299: case 300: case 301: case 302: case 303: case 304: case 305: case 306: case 307: case 332: case 333: case 334: case 335: case 336: case 337: case 338: case 339: case 360: case 361: case 362: case 363: case 364: case 365: case 366: case 367: case 368: case 369: case 370: case 371: case 374: case 375: case 376: case 506: case 507: case 508: case 509: case 510: case 511: case 512: case 513: case 514: case 515: case 516: case 517: case 518: case 519: case 520: case 521: case 522: case 523: case 524: case 525: case 526: case 527: case 532: case 533: case 534: case 535: return true; default: switch (c) { case 7680: case 7681: case 7700: case 7701: case 7702: case 7703: case 7704: case 7705: case 7706: case 7707: case 7708: case 7709: case 7724: case 7725: case 7726: case 7727: case 7756: case 7757: case 7758: case 7759: case 7760: case 7761: case 7762: case 7763: case 7794: case 7795: case 7796: case 7797: case 7798: case 7799: case 7800: case 7801: case 7802: case 7803: case 7833: case 7840: case 7841: case 7842: case 7843: case 7844: case 7845: case 7846: case 7847: case 7848: case 7849: case 7850: case 7851: case 7852: case 7853: case 7854: case 7855: case 7856: case 7857: case 7858: case 7859: case 7860: case 7861: case 7862: case 7863: case 7864: case 7865: case 7866: case 7867: case 7868: case 7869: case 7870: case 7871: case 7872: case 7873: case 7874: case 7875: case 7876: case 7877: case 7878: case 7879: case 7880: case 7881: case 7882: case 7883: case 7884: case 7885: case 7886: case 7887: case 7888: case 7889: case 7890: case 7891: case 7892: case 7893: case 7894: case 7895: case 7896: case 7897: case 7898: case 7899: case 7900: case 7901: case 7902: case 7903: case 7904: case 7905: case 7906: case 7907: case 7908: case 7909: case 7910: case 7911: case 7912: case 7913: case 7914: case 7915: case 7916: case 7917: case 7918: case 7919: case 7920: case 7921: case 7922: case 7923: case 7924: case 7925: case 7926: case 7927: case 7928: case 7929: return true; } } return false; } 

嵌套开关是保持箱子密集并生成两个恒定时间表开关指令所必需的。 在535和7680之间具有大间隙的单个开关将生成对数时间lookupswitch指令。