Java:String:有没有更好的方法来比较字符串

时间:2010-12-15 04:06:45

标签: java swing

今天早上我感到好奇,如果有人有更好的方法可以徘徊

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)){

4 个答案:

答案 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))