自从我完成任何Java以来已经有一段时间了,所以我的语法目前并不是最好的。
我想检查一个char变量是21个特定字符之一,我能做到这一点的最短路径是什么?
例如:
if(symbol == ('A'|'B'|'C')){}
似乎没有用。我需要写它:
if(symbol == 'A' || symbol == 'B' etc.)
答案 0 :(得分:70)
如果您的输入是一个字符,并且您要检查的字符大多是连续的,您可以尝试:
if ((symbol >= 'A' && symbol <= 'Z') || symbol == '?') {
// ...
}
但是,如果您的输入是字符串,则更紧凑的方法(但更慢)是使用带有字符类的正则表达式:
if (symbol.matches("[A-Z?]")) {
// ...
}
如果您有角色,首先需要将其转换为字符串才能使用正则表达式:
if (Character.toString(symbol).matches("[A-Z?]")) {
// ...
}
答案 1 :(得分:11)
如果你事先知道所有21个字符,你可以将它们全部写成一个字符串,然后像这样检查:
char wanted = 'x';
String candidates = "abcdefghij...";
boolean hit = candidates.indexOf(wanted) >= 0;
我认为这是最短的方式。
答案 2 :(得分:6)
您拥有的第一个声明可能不是您想要的...... 'A'|'B'|'C'
实际上是按位操作:)
你的第二个陈述是正确的,但你将有21个OR。
如果21个字符是“连续的”,则上述解决方案没问题。
如果不是,您可以预先计算有效字符的哈希集,并执行类似
的操作if (validCharHashSet.contains(symbol))...
答案 3 :(得分:3)
它可能更清晰地写成一个转换声明,例如。
switch (symbol){
case 'A':
case 'B':
// Do stuff
break;
default:
}
答案 4 :(得分:3)
如果你有特定的字符应该是:
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
答案 5 :(得分:2)
使用Guava:
if (CharMatcher.anyOf("ABC...").matches(symbol)) { ... }
或者,如果其中许多字符是范围,例如“A”到“U”,但有些不是:
CharMatcher.inRange('A', 'U').or(CharMatcher.anyOf("1379"))
您也可以将其声明为static final
字段,这样就不必每次都创建匹配器。
private static final CharMatcher MATCHER = CharMatcher.anyOf("ABC...");
答案 6 :(得分:1)
选项2可行。您还可以使用Set<Character>
或
char[] myCharSet = new char[] {'A', 'B', 'C', ...};
Arrays.sort(myCharSet);
if (Arrays.binarySearch(myCharSet, symbol) >= 0) { ... }
答案 7 :(得分:1)
你可以用这个:
if ("ABCDEFGHIJKLMNOPQRSTUVWXYZ".contains(String.valueOf(yourChar)))
请注意,您无需使用字母A-Z创建单独的字符串。
答案 8 :(得分:0)
是的,你需要像第二行一样写出来。 Java没有第一行的python样式语法糖。
或者,您可以将有效值放入数组中,并检查数组中是否存在symbol
。
答案 9 :(得分:0)
伪代码,因为我没有java sdk:
Char candidates = new Char[] { 'A', 'B', ... 'G' };
foreach(Char c in candidates)
{
if (symbol == c) { return true; }
}
return false;
答案 10 :(得分:0)
你可以把你的字符写成字符串并使用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);
}
答案 11 :(得分:0)
使用java9中使用重载便利工厂方法构建的List<Character>
来实现此目的的一种方法是:
if(List.of('A','B','C','D','E').contains(symbol) {
// do something
}