我想使用几个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/