[英]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中提供的那樣。 使用打印調試程序很麻煩。
我認為您應該使用String類的indexOf(String str)方法來獲取“ src =“字符串的位置,然后使用substring(int,int)方法來獲取包含所需字符串部分的子字符串,然后您可以使用equals方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.