我知道这个问题是基本的,但我正在寻找一个不太笨拙的方法,以下if语句:
- if ((sOne.Contains('*')) || (sOne.Contains('/')) || (sOne.Contains('-')) || (sOne.Contains('+')) || (sOne.Contains('%'))){
我还应该注意,sOne.Contains()引用了以下代码……
- public boolean Contains(char key) {
- // Checks stack for key
- boolean retval = arrs.contains(key);
- return retval;
- }
还应该指出的是,这五个字符永远不会改变.
解决方法
您可以在字符数组上使用break-each循环:
- for (char c : "*/-+%".tocharArray()) {
- if (sOne.Contains(c)) {
- // ...
- break;
- }
- }
如果你非常关心性能,你可能还需要拔出tocharArray()调用并将结果缓存在一个静态的最终char []常量中.
您甚至可以使用此策略在sOne对象上定义其他便捷方法,例如ContainsAny或ContainsAll(对于名称ContainsAny,信用为Sina Madrid):
- public boolean ContainsAny (CharSequence keys) {
- for (int i = 0; i < keys.length; i++)
- if (Contains(keys.charAt(i)) return true;
- return false;
- }
- public boolean ContainsAll (CharSequence keys) {
- for (int i = 0; i < keys.length; i++)
- if (!Contains(keys.charAt(i)) return false;
- return true;
- }
用法看起来像这样:
- if (sOne.ContainsAny("*/-+%")) {
- // ...
- }