【问题标题】:Problem matching Java String against array将Java字符串与数组匹配的问题
【发布时间】:2010-09-20 23:26:20
【问题描述】:

我需要查看字符串值是否与对象值匹配,但为什么这不起作用?

public int countPacks(String flavour) {
    int counter = 0;
    for(int index = 0; index < packets.size(); index++) {            
        if (packets.equals(flavour)) {
           counter ++;
        }
        else {
           System.out.println("You have not entered a correct flavour");
        }
    } 
    return counter; 
}

【问题讨论】:

    标签: java arrays string


    【解决方案1】:

    你的意思可能类似于

    if (packets.get(index).equals(flavour)) {
       ...
    

    【讨论】:

      【解决方案2】:

      什么是“数据包”?它不会是一个字符串 - 那么它如何等于一个字符串?

      我怀疑你的意思是你的测试是:

      if (packets.get(index).equals(flavour))
      

      但是,即使有一个味道正确,你仍然会为每一包“错误”味道打印出“你没有输入正确的味道”!

      我怀疑你想将错误报告移到方法的末尾,在循环之后,并且只有在counter == 0 时才执行它

      【讨论】:

        【解决方案3】:

        您应该这样做以确保您确实在以最简单的方式比较字符串。

        我还修复了你的循环

        public int countPacks(String flavour, List packets)
            {
                int counter = 0;
                for (Iterator iter = packets.iterator(); iter.hasNext();) {
                    Map packet = (Map) iter.next();
        
                    if (packet.get("flavour").toString().equalsIgnoreCase(flavour)) {
                        counter ++;
                    }
                  else {
                    System.out.println("You have not entered a correct flavour");
                    }
                } 
                return counter; 
            }
        

        【讨论】:

          【解决方案4】:

          假设数据包是一个集合(并且您使用的是 JDK 1.5 或更高版本),您也可以只使用该方法:

          public int countPacks(String flavor) {
             int numOccurrences = java.util.Collections.frequency(packets, flavor);
             if(numOccurrences == 0) {
                System.out.println("You have not entered a correct flavor");
             }
             return numOccurrences;
          }
          

          【讨论】:

            【解决方案5】:

            Object 中声明的方法的一个问题是在它们的使用中缺少静态类型检查。这同样适用于同步,通常会锁定错误的对象。

            在这种情况下 Object.equals(Object) 适用于任何两个对象。您已经使用了集合、数据包,而不是从中获取元素。重要的问题不是这个特定的错误是如何产生的,而是我们如何从一开始就防止它发生。

            首先,使用泛型并将迭代的每个元素分配给静态类型的本地:

            public int countPacks(String flavour) {
                // [ The field represents a count. ]
                int count = 0;
                for(int index=0; index<packets.size(); ++index) {
                    String packet = packets.get(index);
                    if (packet.equals(flavour)) {
                       ++count;
                    }
                } 
                // [The error mesage was printed for each non-match.
                //  Even this is probably wrong,
                //    as it should be valid to have no packs of a valid flavour.
                //  Having the message in this method is actually a bit confused.]
                if (count == 0) {
                    System.out.println("You have not entered a correct flavour");
                }
                return count; 
            }
            

            我们可以使用增强的 for 循环进一步整理。

            public int countPacks(String flavour) {
                int count = 0;
                for(String packet : packets) {
                    if (packet.equals(flavour)) {
                       ++count;
                    }
                } 
                if (count == 0) {
                    System.out.println("You have not entered a correct flavour");
                }
                return count; 
            }
            

            这看起来更清楚,但一个好的程序员知道他/她的库。

            public int countPacks(String flavour) {
                int count = Collections.frequency(packets, flavour);
                if (count == 0) {
                    System.out.println("You have not entered a correct flavour");
                }
                return count; 
            }
            

            您也可以考虑使用Map&lt;String,Integer&gt; 而不是集合。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-07-18
              • 2021-04-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多