簡體   English   中英

Java字符串比較不適用於.equals()方法

[英]Java String comparison not working with .equals( ) method

我想使用幾個while循環從Amazon的“搜索結果”頁面獲取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。 這兩個相等,我檢查了輸出,並驗證了是否使用了.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 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 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 10 10 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 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 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,nul 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,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null, null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null, null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,n ull,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null, null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null, null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null, null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null, null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null, null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,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)

我認為您應該使用String類的indexOf(String str)方法來獲取“ src =“字符串的位置,然后使用substring(int,int)方法來獲取包含所需字符串部分的子字符串,然后您可以使用equals方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM