Java 字符串比较不适用于 .equals( ) 方法

Java String comparison not working with .equals( ) method

我想使用多个 while 循环从亚马逊的 "search results" 页面获取 jpg 文件的所有实例。我包含了 system.out.println 语句来帮助我跟踪我的代码在终端输出中做了什么。 java 程序成功循环遍历 str3 字符串,直到按顺序找到 "s" "r" "c",因此它知道源在前面。然后使用接下来的 42 个字符来查看生成的代码是否与亚马逊网站上用于显示图像的代码 "src=http://ecx.images-amazon.com/images/I/" 相同。循环找到 "src=http://ecx.images-amazon.com/images/I/" 中的所有字符,并转换字符数组转换为名为 temp 的字符串。我将 temp 与 String 变量 stringToFind 进行比较。这 2 个相等,我检查了输出,并验证使用了 .equals() 而不是 ==。我完全不知道为什么第二个 if 语句的比较不起作用。请帮忙!

编辑:TL;DR:if 语句与注释的比较 //DOES NOT ENTER LOOP!!!!不起作用。

import java.util.Arrays;

public class JpgFinder {
    //Finds the url for a jpg file within Amazon.ca search results page //source code so that the image results of a users search may be stored.
    public static void main(String[] args) {
        String str1 = "src=http://ecx.images-amazon.com/images/I/31IVWofSY8L._AA160_.jpg onload=";
        String str2 = "src=http://ecx.images-amazon.com/images/I/31ZTujPkvvL._AA160_.jpg onload=";
        String str3 = str1 + str2;
        int str3Length = str3.length();
        int counter1 = 0;
        int counter2 = 0;
        int counter3 = 0;
        int counter4 = 0;
        int counter5 = 0;
        int counter6 = 0;
        int sum = 0;
        String temp = "";
        char[] charArray = new char[100];
        char[] charArray2 = new char[100];
        String[] jpgArray = new String[500];
        boolean jpgFound = false;
        //Searches for src
        while (counter1 < str3Length) {
            System.out.println("1");
            if ((str3.charAt(counter1) == 's') && (str3.charAt(counter1 + 1) == 'r') && (str3.charAt(counter1 + 2) == 'c')) {
                //Found src
                System.out.println("2");
                counter3 = counter1;
                while (counter2 < 42) {
                    //Takes src=http://ecx.images-amazon.com/images/I/
                    System.out.println("3");
                    charArray[counter2] = str3.charAt(counter2);
                    counter2++;
                    counter1++;
                }
                temp = new String(charArray);
                String stringToFind = "src=http://ecx.images-amazon.com/images/I/";
                System.out.println(temp);
                System.out.println("4");
                if (temp.equals(stringToFind)) {
                    //If src=http://ecx.images-amazon.com/images/I/ is compared and confirmed, continue
                    //DOES NOT ENTER LOOP!!!!
                    System.out.println("5");
                    while ((counter2 < 82) && jpgFound == false) {
                        if ((str2.charAt(counter2) == '.') && (str3.charAt(counter2 + 1) == 'j') && (str3.charAt(counter2 + 2) == 'p') && (str3.charAt(counter2 + 3) == 'g')) {
                            counter2++;
                            jpgFound = true;
                            counter4 = counter2 + 3;
                            sum = counter4 - counter3;
                            System.out.println("6");
                            while (counter5 < sum) {
                                charArray2[counter5] = str3.charAt(counter5);
                                System.out.println("7");
                            }
                        }
                        else {
                            counter2++;
                            System.out.println("8");
                        }
                    }
                }
                System.out.println("9");
                System.out.println("DID NOT ENTER");
            }
            String temp2 = new String(charArray2);
            jpgArray[counter6] = temp2;
            counter6++;
            counter1++;
            System.out.println("10");
        }
        System.out.println("Second attempt: " + temp);
        System.out.println("Jpgs: " + Arrays.toString(jpgArray));
    }
}

输出:

1 2个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 3个 来源=http://ecx.images-amazon.com/images/I/ 4个 9 没有进入 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 2

src=http://ecx.images-amazon.com/images/I/

4 9 没有进入 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 1个 10 第二次尝试:src=http://ecx.images-amazon.com/images/I/ Jpgs: [ , , , , , , , 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, 空, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空l, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]

我觉得你应该使用indexOf(String str) method of the String class to get the location of the "src=" string, then use the substring(int,int)方法获取包含你想要的字符串部分的子字符串,然后你可以使用equals方法。

因为temp和stringToFind不相等

temp 的长度为 100,stringToFind 的长度为 42。

为什么 temp 的长度为 100?因为 new String(charArray) 创建一个 String 解码 all 数组中的字节。包括你没用过的。并且 charArray 被分配了一个包含 100 个元素的数组。

此外,使用 IDE 调试支持会很有成效,就像在 Netbeans 或 Eclipse 中找到的那样。用打印调试程序很麻烦

改用new String(charArray, 0, 42)