在Java中,如何从字符串数组中查找字符串,以及为什么下面的示例不能按预期工作

在Java中,如何从字符串数组中查找字符串,以及为什么下面的示例不能按预期工作,java,Java,如何从字符串数组中查找字符串,在下面的示例中,除了搜索第一个字符串外,我总是搜索失败,但第二个或第三个字符串除外,我甚至尝试使用[indexof!=1条件而不是等于],但结果仍然相同,为什么?-请告知。谢谢 我的例子是: String[] TEXT_ARRAY = {"first","second","third" }; String parameter ="second"; for (String string : TEXT_ARRAY) { System.out.p

如何从字符串数组中查找字符串,在下面的示例中,除了搜索第一个字符串外,我总是搜索失败,但第二个或第三个字符串除外,我甚至尝试使用[indexof!=1条件而不是等于],但结果仍然相同,为什么?-请告知。谢谢

我的例子是:

String[] TEXT_ARRAY = {"first","second","third" };
    String parameter ="second";

    for (String string : TEXT_ARRAY) {
    System.out.println("****** [containsScript ? ]  IS EQUALS ?  " + parameter.toString().toUpperCase().equals(string.toString().toUpperCase()));
    }

字符串实际上是不可变的。如果您有两个具有相同内容的字符串,则由于以下原因,它们将是相同的对象

因此,您应该能够做到:

parameter.equals(字符串)

对于您的搜索,如果它使搜索更容易,您可以执行以下操作:

Arrays.asList(文本数组)。包含(参数)


这与循环的工作原理完全相同。

将System.out更改为


System.out.println(“***[containsScript?]是等于?”+(parameter.toString().toUpperCase().EQUALS(string.toString().toUpperCase()))

您的脚本按预期工作,正在打印:

[containsScript?]是否等于?假的

[containsScript?]是否等于?真的

[containsScript?]是否等于?假的

但是,您有大量冗余代码,您的条件可以重写为:

System.out.println("****** [containsScript ? ]  IS EQUALS ?  " + parameter.equalsIgnoreCase(string));

另外,你到底需要实现什么?如果您想测试给定的字符串是否存在于一组字符串中,那么我建议使用一个集合,而不是数组,并在每次需要进行检查时对其进行迭代。

您的示例对我很有用。结果将是

false
true
false

注意:我认为toString()方法在这里是不必要的。

请删除冗余的
toString()
toUpperCase()
方法。@Jivings:toUpperCase()不是冗余的,如果你想把
“a”
“a”
作为相同的字符串进行协调。那么就使用
equalsIgnoreCase()
“如果您有两个具有相同内容的字符串,那么它们将是相同的对象”
这仅适用于字符串文本。如果这是真的,我们可以使用
运算符==
检查字符串的相等性。此外,如果要协调
“a”
“a”,您的建议将失败“
作为识别符。在示例中它们是字符串文字。string1.equalsIgnoreCase(string2)是一种更简洁的检查相等忽略大小写的方法。这是有效的,你期望什么?你得到什么?OP将错误的代码放入了问题中,这就是为什么练习有效。请参阅答案中的第二条评论以查看OPs实际问题代码您是正确的,上面发布的实际示例很好,但由于错误,我发布了一个错误的示例,请尝试在下面尝试查找除第一个字符串以外的字符串,如“onabort”失败-请建议?您是正确的pcalcao,上面发布的实际示例效果很好,但我错误地发布了一个错误的示例,请在下面尝试查找除第一个字符串(如“onabort”)之外的字符串失败的地方-请建议?示例字符串[]TEXT2={“document.write”、“onabort”、“onactivate”、“onafterprint”};//字符串参数2=“document.write”;字符串参数2=“onabort”;对于(字符串:TEXT2){System.out.println(“******[containsScript?]等于?”+参数2.equalsIgnoreCase(字符串));}请更新您的问题以尽可能清楚地反映您的问题。我认为您的错误在于您将变量“parameter2”设置了两次,设置为不同的值。在循环内,只有最后一个值仍然有效,第一个值丢失。