比较Java中的字符

自从我做了Java以来​​已经有一段时间了,所以我的语法目前还不是最好的。

我想检查一个charvariables是21个特定的字符之一,我可以做到这一点最短的方式是什么?

例如:

if(symbol == ('A'|'B'|'C')){} 

似乎没有工作。 我是否需要像这样写:

 if(symbol == 'A' || symbol == 'B' etc.) 

如果你的input是一个字符,你正在检查的字符大多是连续的,你可以试试这个:

 if ((symbol >= 'A' && symbol <= 'Z') || symbol == '?') { // ... } 

但是,如果你的input是一个string,一个更紧凑的方法(但更慢)是使用一个字符类的正则expression式:

 if (symbol.matches("[AZ?]")) { // ... } 

如果你有一个angular色,在使用正则expression式之前,你首先需要把它转换成一个string:

 if (Character.toString(symbol).matches("[AZ?]")) { // ... } 

如果你事先知道你所有的21个字符,你可以把它们全部写成一个string,然后像这样检查:

 char wanted = 'x'; String candidates = "abcdefghij..."; boolean hit = candidates.indexOf(wanted) >= 0; 

我认为这是最短的方式。

你的第一个陈述可能不是你想要的… 'A'|'B'|'C'实际上是按位操作:)

你的第二个陈述是正确的,但你将有21个OR。

如果21个字符是“连续的”,上面的解决scheme是好的。

如果没有,你可以预先计算一个有效字符的哈希集合,并做类似的事情

 if (validCharHashSet.contains(symbol))... 

它可能会更清楚地写成一个转换语句,例如通过下降

 switch (symbol){ case 'A': case 'B': // Do stuff break; default: } 

如果你有特定的字符应该是:

 Collection<Character> specificChars = Arrays.asList('A', 'D', 'E'); // more chars char symbol = 'Y'; System.out.println(specificChars.contains(symbol)); // false symbol = 'A'; System.out.println(specificChars.contains(symbol)); // true 

使用番石榴 :

 if (CharMatcher.anyOf("ABC...").matches(symbol)) { ... } 

或者如果这些字符中有很多是一个范围,比如“A”到“U”,但有些则不是:

 CharMatcher.inRange('A', 'U').or(CharMatcher.anyOf("1379")) 

你也可以声明这是一个static final字段,所以不必每次都创build匹配器。

 private static final CharMatcher MATCHER = CharMatcher.anyOf("ABC..."); 

选项2将工作。 你也可以使用Set<Character>或者

 char[] myCharSet = new char[] {'A', 'B', 'C', ...}; Arrays.sort(myCharSet); if (Arrays.binarySearch(myCharSet, symbol) >= 0) { ... } 

你可以使用这个:

 if ("ABCDEFGHIJKLMNOPQRSTUVWXYZ".contains(String.valueOf(yourChar))) 

请注意,您不需要使用字母AZ创build单独的string。

是的,你需要把它写成像你的第二行。 Java没有你的第一行的python风格的语法糖。

或者,你可以把你的有效值放到一个数组中,并检查数组中是否存在symbol

伪代码,因为我没有得到一个Java SDK:

 Char candidates = new Char[] { 'A', 'B', ... 'G' }; foreach(Char c in candidates) { if (symbol == c) { return true; } } return false; 

你可以把你的字符写成string,并使用equals方法。

例如:

 String firstChar = "A"; String secondChar = "B"; String thirdChar = "C"; if (firstChar.equalsIgnoreCase(secondChar)) || (firstChar.equalsIgnoreCase(thirdChar))) // As many equals as you want { System.out.println(firstChar + " is the same as " + secondChar); } else { System.out.println(firstChar + " is different than " + secondChar); } 

一种使用在java9中使用重载的便捷工厂方法构造的List<Character>方法如下:

 if(List.of('A','B','C','D','E').contains(symbol) { // do something }