今天早上我感到好奇,如果有人有更好的方法可以徘徊
if(TAG_PLAY.equalsIgnoreCase(e.getActionCommand())
||TAG_PASSWORD.equalsIgnoreCase(e.getActionCommand())
||...
){
我有预感,这可以通过做类似的事情来改善 创建一个大字符串并在其中查找e.getActionCommand() 但我不知道它是否会更有效率
注意:这与getActionCommand无关,我纯粹对逻辑,性能和新方法/模式感兴趣做同样的事情
编辑:我不考虑大写和小写的辩论^^
编辑:
这个怎么样:
s = TAG_PLAY+","+TAG_PASSWORD;
//compareToIgnoreCase is not optimal since it will go through all the String
if(0!=s.compareToIgnoreCase(anotherString)){
答案 0 :(得分:8)
您是否考虑过使用Set.contains(对象)?
例如:
Set<String> cases = new HashSet<String>();
cases.add( TAG_PLAY.toLowerCase() );
cases.add( TAG_PASSWORD.toLowerCase() );
...
if ( cases.contains( e.getActionCommand().toLowerCase() ) {
...
答案 1 :(得分:5)
如果您正在实现字符串匹配的数据结构,那么您可能需要某种Trie。
如果您只是想在没有大量代码的情况下在Java中执行此操作,请将所有要匹配的字符串放在一个集合中,然后检查您的目标字符串是否在集合中。
答案 2 :(得分:0)
这似乎是enum的合适人选。一个简单的例子是:
public enum TagType
{
TAG_PLAY,
TAG_PASSWORD
}
但是,你可以详细说明这一点。 Java枚举提供整数(用于比较)的性能以及对象的类型安全性和行为。您不必担心e.getActionCommand()
不是有效TAG的等价物,因为它是类型安全的。
答案 3 :(得分:0)
你可以做到
final String upperCaseCommand = e.getActionCommand().toUpperCase();
if(TAG_PLAY.equals(upperCaseCommand)
||TAG_PASSWORD.equals(upperCaseCommand)
||...
){
(当然,常数也需要是大写的。
您也可以将它们放入哈希值。
if (tags.containsKey(upperCaseCommand))