【问题标题】:Trying to find a String element inside an Array of strings [duplicate]试图在字符串数组中找到一个字符串元素[重复]
【发布时间】:2017-08-02 04:44:17
【问题描述】:

我正在尝试编写一个方法,它接受一个字符串,将其转换为一个字符串数组,然后在该数组中搜索一个特定的字符串。这是我的代码:

public static void ThereOrNaw ( String s, String s2 ){ 

    String[] words = s.split("\\s");
    for (int i = 0; i < words.length; i++) {
        words[i] = words[i].replaceAll("[^\\w]", "");
    }
    for ( int i = 0; i < words.length; i++) {
        if( s2 == words[i] ) {
            System.out.println("Found");
        }
        else if( s2 != words[i] && (i + 1) == words.length) {
            System.out.println("Not Found");
        }
    }
}

但是,当我运行此方法时,即使元素在数组中,它也总是返回“未找到”。除非,字符串数组只有我正在寻找的元素。任何想法为什么这不起作用?

【问题讨论】:

  • 您的代码(和算法)似乎过于复杂,您的实现与System.out.println(s.contains(s2) ? "Found" : "Not Found"); 有何不同?
  • 艾略特弗里施是正确的。要添加更多,对于区分大小写的方法,s.toLowerCase().contains(s2.toLowerCase()) ? "Found" : "Not Found"

标签: java arrays string search


【解决方案1】:

您应该使用equals() 而不是==

== 比较您的 String 对象不是按内容,而是按内存中的实际地址(简单来说)。 因此,如果您将使用 equals(),您将按内容比较 String 对象。 如果您不关心大小写,也可以使用equalsIgnoreCase() 方法。

还有一个小建议,在调用equals() 之前检查s2 而不是null,因为你不知道,哪个对象客户端将发送到这个方法。

例如:

if (s2 != null && s2.equals(words[i])) { ...

else if (s2 != null && !s2.equals(words[i]) ...

【讨论】:

  • 看来可以工作了,谢谢!!由于我对 Java 很陌生,因此我只是想进一步深入了解。为什么equals 有效而== 无效?
  • @DanielUtvich 我补充了我的答案。
【解决方案2】:

正如他所说,您不必使用 == 比较单词,== 比较对象

看我为你修改了你的代码:

 public static void main(String[] args) {

    thereOrNaw("hola","hola");
    thereOrNaw("hola","mundo");
}

public static void thereOrNaw ( String s, String s2 ){ 

    String[] words = s.split("\\s");
    for (int i = 0; i < words.length; i++) {
        words[i] = words[i].replaceAll("[^\\w]", "");
    }
    for ( int i = 0; i < words.length; i++) {
        if( s2.equals(words[i]) ) {
            System.out.println("Found");
        }
        else if( s2 != words[i] && (i + 1) == words.length) {
            System.out.println("Not Found");
        }
    }
}

它给了我:

找到 未找到

【讨论】:

    猜你喜欢
    • 2019-08-09
    • 2019-11-21
    • 1970-01-01
    • 2018-05-15
    • 2013-08-04
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2011-01-23
    相关资源
    最近更新 更多