我正在使用Java逐行读取文件并解析每行中的数据以获取报告。会定期将一个URL写入一行,我想绕过该行。我需要设置一个if...then
来测试URL的存在 - 在这种特定情况下,我将其定义为读取http
的行的前四个字节。如果条件为真,则读取文件中的下一行,但如果条件为false,则将当前行发送到解析器以进行报告输出。
简单,不是吗?我遇到了无法获得if..then
语句以准确识别true
条件的问题。我唯一的线索是,当我的inputString
与测试值相等时,它会传递为true
。除此之外......我无法发现任何与众不同的东西。
public class testClass
{
public static void main(String args[])
{
String inputString1 = "http://www.google.com/r";
String inputString2 = "google";
String inputString3 = "google search";
String inputString4 = "http";
parseInput(inputString1);
parseInput(inputString2);
parseInput(inputString3);
parseInput(inputString4);
}
//
private static void parseInput(String inputString8) {
int httpFlag;
if (inputString8.substring(0,4) == "http")
{ httpFlag = 1467; } else
{ httpFlag = 10644; }
System.out.println(inputString8+" "+inputString8.toLowerCase().substring(0,4)+" "+httpFlag);
}
}
这是我的输出:
http://www.google.com/r http 10644
google goog 10644
google search goog 10644
http http 1467
我期待1467
和inputString1
都inputString4
。
控制台出现以正确显示我的输入和子字符串,Java文档中没有任何内容表明我的子字符串是char
数组或除字符串之外的任何内容,所以我无法想象为什么http
为4字节字符串的前四个字节与(4 + x)字节字符串的前四个字节“不同”。我错过了什么?
答案 0 :(得分:5)
将字符串与equals
进行比较,而不是==
。没有什么特别的事实,你所比较的字符串是调用substring
的结果。
答案 1 :(得分:2)
使用if (inputString8.substring(0,4).equals("http"))
。
==
运算符检查两个表达式是否是同一个对象,你想检查它们是否具有相同的值。
答案 2 :(得分:1)
==测试看两件事是否是同一个对象。如果要比较字符串char by char,请使用String类的equals()方法。