在Java中,对于带有大量||的if语句是否有更简洁的方法

前端之家收集整理的这篇文章主要介绍了在Java中,对于带有大量||的if语句是否有更简洁的方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道这个问题是基本的,但我正在寻找一个不太笨拙的方法,以下if语句:
  1. if ((sOne.Contains('*')) || (sOne.Contains('/')) || (sOne.Contains('-')) || (sOne.Contains('+')) || (sOne.Contains('%'))){

我还应该注意,sOne.Contains()引用了以下代码……

  1. public boolean Contains(char key) {
  2. // Checks stack for key
  3. boolean retval = arrs.contains(key);
  4. return retval;
  5.  
  6. }

还应该指出的是,这五个字符永远不会改变.

解决方法

您可以在字符数组上使用break-each循环:
  1. for (char c : "*/-+%".tocharArray()) {
  2. if (sOne.Contains(c)) {
  3. // ...
  4. break;
  5. }
  6. }

如果你非常关心性能,你可能还需要拔出tocharArray()调用并将结果缓存在一个静态的最终char []常量中.

您甚至可以使用此策略在sOne对象上定义其他便捷方法,例如ContainsAny或ContainsAll(对于名称ContainsAny,信用为Sina Madrid):

  1. public boolean ContainsAny (CharSequence keys) {
  2. for (int i = 0; i < keys.length; i++)
  3. if (Contains(keys.charAt(i)) return true;
  4.  
  5. return false;
  6. }
  7.  
  8. public boolean ContainsAll (CharSequence keys) {
  9. for (int i = 0; i < keys.length; i++)
  10. if (!Contains(keys.charAt(i)) return false;
  11.  
  12. return true;
  13. }

用法看起来像这样:

  1. if (sOne.ContainsAny("*/-+%")) {
  2. // ...
  3. }

猜你在找的Java相关文章