是否有可能检查一个字符是否匹配可能性列表?

时间:2014-12-18 21:19:22

标签: java if-statement char

例如,我知道在检查字符串时,您可以执行类似

的操作
if (string.matches("a|e|i|o|u|A|E|I|O|U" ) )
{
   // Then do this code.
}

但是有没有办法检查char是否与可能性列表匹配? 或者我必须逐个检查,例如

if(char == a || char == e || char == i )

...等。

4 个答案:

答案 0 :(得分:18)

通过使用indexOf method搜索字符串,您可以在char中查找String时执行类似操作。

if ("aeiouAEIOU".indexOf(aChar) != -1)

答案 1 :(得分:2)

从表现的角度来看,最佳方法是:

private final BitSet matchChars = matchChars();

private BitSet matchChars() {
  final BitSet bs = new BitSet();
  final String matchString = "aeiouAEIOU";
  for (int i = 0; i < matchString.length(); i++)
     bs.set(matchString.charAt(i));
  return bs;
}

public boolean charMatches(char c) { return matchChars.get(c); }

即使您使用char类型提供的整个16位范围,该方法所需的内存也非常适中:最多8 KB。

答案 2 :(得分:1)

您可以创建要检查的字符集合,并查看该集合是否包含有问题的字符。 HashSet非常适合O(1)查找时间。 (并不重要,因为大小不变。)

private static final HashSet<Character> vowels = new HashSet<Character>();

//Initialize vowels hashSet to contain vowel characters
static{
    vowels.add('a');
    vowels.add('e');
    vowels.add('i');
    vowels.add('o');
    vowels.add('u');
    vowels.add('A');
    vowels.add('E');
    vowels.add('I');
    vowels.add('O');
    vowels.add('U');
}

public static boolean isVowel(Character c){
    return vowels.contains(c);
}

答案 3 :(得分:0)

在我们使用Unicode之前,当字符集只有128个字符(ASCII)或更晚的256个(ISO 8859-1)时,我们通常会创建一个布尔数组并使用字符代码查找 - 非常快速。你仍然可以这样做(65536 boolean的数组并不像今天的内存标准那么大,或类似

static boolean[] vowelSet = new boolean[128]; // all initialized to false by default

static {
    vowelSet['A'] = true;
    vowelSet['E'] = true;
    ...
    vowelSet['u'] = true;
}

然后再抬头:

boolean isVowel(char ch) {
    return ch < 128 && vowelSet[ch];
}

我认为,如果效率非常重要,我仍然采用的方法。通常它不是,所以其他答案之一可能会给你更多可读的代码。