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

Java:String:有没有更好的方法来比较字符串,java,swing,Java,Swing,今天早上我很好奇,想知道有没有更好的方法 if(TAG_PLAY.equalsIgnoreCase(e.getActionCommand()) ||TAG_PASSWORD.equalsIgnoreCase(e.getActionCommand()) ||... ){ 我有一种预感,这可以通过做类似的事情来改善 创建一个大字符串并在其中查找e.getActionCommand() 但我不知道这是否会更有效率 注意:这与getActionCommand无关,我只对做同样事情的逻辑、性

今天早上我很好奇,想知道有没有更好的方法

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

这看起来是一个很好的候选人。一个简单的例子是:

public enum TagType
{
  TAG_PLAY,
  TAG_PASSWORD
}

但是,您可以详细说明这一点。Java枚举提供整数的性能(用于比较)以及对象的类型安全性和行为。您不必担心等价的
e.getActionCommand()
不是有效的标记,因为它是类型安全的。

您考虑过使用Set.contains(对象)吗

例如:

  Set<String> cases = new HashSet<String>();
  cases.add( TAG_PLAY.toLowerCase() );
  cases.add( TAG_PASSWORD.toLowerCase() );

  ...
  if ( cases.contains( e.getActionCommand().toLowerCase() ) { 
  ...
Set cases=newhashset();
cases.add(TAG_PLAY.toLowerCase());
cases.add(TAG_PASSWORD.toLowerCase());
...
if(cases.contains(e.getActionCommand().toLowerCase()){
...

如果要实现用于字符串匹配的数据结构,可能需要某种类型的

如果您只是希望在Java中不使用大量代码来执行此操作,请将所有要匹配的字符串放入一个集合中,然后检查目标字符串是否在集合中。

您可以这样做

final String upperCaseCommand = e.getActionCommand().toUpperCase();
if(TAG_PLAY.equals(upperCaseCommand)
   ||TAG_PASSWORD.equals(upperCaseCommand)
   ||...
 ){
(当然,常数也需要大写

你也可以把它们放在一个散列中

if (tags.containsKey(upperCaseCommand))

如果添加保证不会添加重复项(或者即使它是——不管这里的
包含什么
只需要找到一个),那么
[Array]列表也会起作用。使用列表(相对于集合)的一个“优势”是
Arrays.asList(TAG\u PLAY.toLowerCase(),TAG\u PADDWORD,…)
。就我个人而言,我对复制
toLowerCase
感到厌烦,但遗憾的是Java缺少一个[n简单的]“映射”结构。对于微不足道的n,O(n)与O(1)的争论在这里基本上是无关紧要的。你也可以在一个语句中创建一个集合——新的HashSet(Arrays.asList(TAG\u PLAY.toLowerCase(),TAG\u PASSWORD.toLowerCase(),…).ActionCommand需要一个字符串(除非有办法更改),因此枚举会改进测试吗?@Jason,我想我误解了。我解释为“与getActionCommand无关”如果我不清楚的话,很抱歉,我的意思是,我只是说比较字符串,getaction命令就在我手边的代码示例中