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