比较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 }