【问题标题】:if statement never returns true in scala when comparing strings比较字符串时,如果语句在 scala 中永远不会返回 true
【发布时间】:2020-05-30 06:07:24
【问题描述】:

我正在从 Scala 中的文本文件中读取文本。我在使用 if 语句时遇到了困难。

for (line <- Source.fromFile(filename).getLines) {
    if (line.length>7) { 
        println("b1  >" + line(7)+ "<    " + line(0).getType)
        if(line(7)=="#") {
            println("hashtag")
        }
    }
}

下面是我的文本文件中的 2 行。第一行有 4 个空格,后跟许多主题标签。第二行是 4 个空格,后跟 1 个标签(4 个空格不断被堆栈溢出删除)

##################################################################################################################################################
#

下面是我收到的输出

//| b1  >#<    12
//| b1  > <    12

问题 1) 为什么getType 返回 12?这是我听过的最奇怪的数据类型。

问题 2)(可能由 Q1 回答)为什么 if(line(7)=="#") 语句永远不会返回 true?

【问题讨论】:

  • 您不使用== 来比较字符串。使用.equals 方法。
  • @SarveshKumarSingh 在 Scala 中你可以(它调用 equals)。
  • @SarveshKumarSingh 这在 Scala 中是不正确的,但在该死的 Java 中是不正确的。 - Scalaflow,你能格式化和缩进你的代码以便它可读吗?无论如何,我认为问题在于line(7) 重新运行Char 而不是String。使用line(7) == '7'
  • @AlexeyRomanov 是的。但是== 允许nulls 在没有通知的情况下通过,这在大多数情况下是不希望的(只是我个人的经验)。对我来说,这已成为许多失败者学到的硬性规则。我认为这在 Scala 开发人员中更常见。

标签: scala if-statement types


【解决方案1】:

以相反的顺序回答您的问题:

问题 2。因为lineString,所以line(7)Char,它永远不会等于String。您想将其与 '#' 进行比较。

问题1.由于上述原因,这调用了Char.getType方法

Returns a value indicating a character's general category.

(不是你可以从 Scala 自己的文档中找到它)。你可能想要getClass

【讨论】:

  • 没有关于比较不兼容类型的编译器警告吗?
  • 其实应该有的,是的。
猜你喜欢
  • 2016-11-26
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多