比较Java中的字符

Posted

技术标签:

【中文标题】比较Java中的字符【英文标题】:Comparing chars in Java 【发布时间】:2011-06-29 09:46:06 【问题描述】:

我想检查一个 char 变量是 21 个特定字符之一,我能做到这一点的最短方法是什么?

例如:

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

似乎没有工作。我需要这样写吗:

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

【问题讨论】:

是的,这是一种方式。看看regex 【参考方案1】:

如果您的输入是一个字符,并且您要检查的字符大多是连续的,您可以试试这个:

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


但是,如果您的输入是字符串,则更紧凑的方法(但速度较慢)是使用带有字符类的正则表达式:

if (symbol.matches("[A-Z?]")) 
    // ...

如果您有一个字符,您首先需要将其转换为字符串,然后才能使用正则表达式:

if (Character.toString(symbol).matches("[A-Z?]")) 
    // ...

【讨论】:

+1 如果大多数情况下 21 个符号是连续的,我会这样做。 谢谢马克,我以前用过正则表达式,但从来没有用过 Java,甚至不知道你可以! Oracle 文档几乎总结了答案并为上述答案提供了缺陷,因此请看一下。 docs.oracle.com/javase/tutorial/i18n/text/charintro.html.【参考方案2】:

是的,您需要像第二行一样编写它。 Java 没有第一行的 Python 风格语法糖。

或者,您可以将有效值放入数组中并检查数组中是否存在symbol

【讨论】:

【参考方案3】:

伪代码,因为我没有 java sdk:

Char candidates = new Char[]  'A', 'B', ... 'G' ;

foreach(Char c in candidates)

    if (symbol == c)  return true; 

return false;

【讨论】:

【参考方案4】:

选项 2 将起作用。您也可以使用Set&lt;Character&gt;

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

【讨论】:

【参考方案5】:

您的第一条语句可能不是您想要的...'A'|'B'|'C' 实际上是在进行按位运算:)

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

如果 21 个字符是“连续的”,上述解决方案就可以了。

如果不是,您可以预先计算一组有效字符的哈希值并执行类似

的操作
if (validCharHashSet.contains(symbol))...

【讨论】:

【参考方案6】:

如果写成 switch 语句可能会更清楚,例如:

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

【讨论】:

【参考方案7】:

使用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...");

【讨论】:

【参考方案8】:

如果您事先知道所有 21 个字符,则可以将它们全部写为一个字符串,然后像这样检查:

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

我认为这是最短的方法。

【讨论】:

非常优雅的解决方案。恭喜。【参考方案9】:

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

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           

【讨论】:

+1 是非常好的替代方法,这对于很多角色来说可能更好。【参考方案10】:

你可以把你的字符写成字符串并使用 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】:

你可以用这个:

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

请注意,您不需要使用字母 A-Z 创建单独的字符串。

【讨论】:

【参考方案12】:

使用java9 中的重载便利工厂方法构造的List&lt;Character&gt; 的一种方法是:

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

【讨论】:

【参考方案13】:

您可以使用 String.indexOf(char) 方法轻松解决这个问题,如果 char 不在字符串中,则返回 -1。

String candidates = "ABCDEFGHIJK";
if(candidates.indexOf(symbol) != -1)
    //character in list of candidates

【讨论】:

以上是关于比较Java中的字符的主要内容,如果未能解决你的问题,请参考以下文章

Java中的字符串比较

Java中的相似性字符串比较

java 中的字符串比较

比较Java中的字符

如何比较Java中的两个字符串日期?

如何比较 Java 中的字符串?