【问题标题】:How to properly use a java substring in an if test? [duplicate]如何在 if 测试中正确使用 java 子字符串? [复制]
【发布时间】:2014-01-09 17:34:00
【问题描述】:

我正在使用 Java 逐行读取文件并解析每行中的数据以生成报告。定期会有一个 URL 写入一行,我想绕过该行。我需要设置一个if...then 来测试URL 的存在——在这种特定情况下,我将其定义为http 行的前四个字节。如果条件为真,则读取文件中的下一行,但如果条件为假,则将当前行发送到解析器以进行报告输出。

很简单,不是吗?我遇到了无法让我的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 用于inputString1inputString4。 控制台 出现 可以正确显示我的输入和子字符串,Java 文档中没有任何内容表明我的子字符串将是 char 数组或字符串以外的任何内容,所以我不知道为什么http 因为 4 字节字符串的前四个字节与 (4+x) 字节字符串的前四个字节“不同”。我错过了什么?

【问题讨论】:

  • 比较String使用equals方法。
  • 如果每次有人在这个网站上用错误的方式比较字符串时我都得到一个镍币,那么你知道它是怎么回事。
  • 应该有专门的原因。
  • @SotiriosDelimanolis 不,字面意思是“关闭,因为这不是你在 Java 中比较字符串的方式”;)

标签: java if-statement substring


【解决方案1】:

将字符串与equals 进行比较,而不是==。您要比较的字符串是调用substring 的结果这一事实没有什么特别之处。

【讨论】:

  • 我相信这是正确的。大多数时候 == 会给你正确的答案,但我遇到过几个例子,它不会。使用 equals.. 或者更好的是 StringUtils.equals.
  • @dwwilson66 为什么选择使用= 而不是==
  • 使用方法“等于”而不是运算符“=”
  • @BillMan:“大多数时候 == 会给你正确的答案...” 不,这甚至不接近正确。大多数时候,== 会给您错误的答案。此外,作为一名工程师,您最后想要的东西是大多数时间正确的东西。
  • @BillMan 对不起,但您的原始评论与您的​​“熟悉”相矛盾。 “大多数情况下 == 会给你正确的答案,但我遇到过一些情况不会”。除非你做错了,否则你不会“遇到”实例。也就是说,使用==== 只做一件事;比较参考值。如果您想知道一个String 是否包含与另一个String 相同的文本,请使用.equals()。如果你想知道两个引用是否指向同一个对象,你可以使用==
【解决方案2】:

== 测试两个事物是否是同一个对象。如果要逐个字符比较字符串,请使用 String 类的 equals() 方法。

【讨论】:

    【解决方案3】:

    使用if (inputString8.substring(0,4).equals("http"))

    == 运算符检查两个表达式是否为同一个对象,您要检查它们是否具有相同的值。

    【讨论】:

    • 感谢您对为什么一个有效而另一个无效的有用区分!这有帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-06-15
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多