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

标签 java arrays string comparison

我想使用几个while循环从Amazon的“搜索结果”页面获取jpg文件的所有实例。我已经包含了system.out.println语句,以帮助我跟踪终端输出中代码的作用。 Java程序成功地循环遍历了str3字符串,直到顺序找到“ s”,“ r”,“ c”为止,因此它知道源在前面。然后,它使用接下来的42个字符来查看结果代码是否与Amazon网站上用于显示图像的代码"src=http://ecx.images-amazon.com/images/I/"相同。循环找到"src=http://ecx.images-amazon.com/images/I/"中的所有字符,并将字符数组转换为一个名为temp的字符串。我比较temp和String变量stringToFind。这两个相等,我检查了输出,并验证了是否使用了.equals()而不是==。我没有最清楚的线索,为什么第二个if语句的比较不起作用。请帮忙!

编辑:TL; DR:带有注释的if语句的比较//不输入循环!!!不起作用。

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
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个
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,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]

最佳答案

这是因为temp和stringToFind不相等。

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

为什么温度长度为100?因为new String(charArray)创建一个String来解码数组中的所有字节。包括您没有使用过的。并且为charArray分配了100个元素的数组。

同样,使用IDE调试支持也很有效,就像Netbeans或Eclipse中提供的那样。使用打印调试程序很麻烦。

改用new String(charArray, 0, 42)

关于java - Java字符串比较不适用于.equals()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31248173/

相关文章:

arrays - 在 TypeScript 中向类型化数组添加方法

c - bmp 图像到 c 中的矩阵(二维数组)

java - 使用 HttpServletRequest 捕获重复的请求 header

java - 创建抽象类或匿名类的实例

java - 在java中从csv中读取带逗号的值

java - 类 :JSONParser get values by id?

c++ - strtol 的基础知识?

javascript - JS RegExp 从第二次出现 <h2> 标记开始,并包含其后的所有内容

ruby - 如何打印字符串中每一行的行号?

java - JSF 不解释接缝