【问题标题】:Checking if a string contains a character in Scala检查字符串是否包含Scala中的字符
【发布时间】:2016-11-06 10:09:57
【问题描述】:

我有一个字符串集合,我正在检查它们是否被正确屏蔽。

它们在地图中,因此我正在对其进行迭代,提取文本值然后进行检查。我正在尝试各种不同的组合,但没有一个能给我我需要的最终结果。我已经通过迭代每个字符来让它工作,但这感觉非常 java-esque。

我的收藏是这样的: “文本”->“文本” “文本”->“**xt” “文本”->“****”

在前两种情况下,我需要确认该值没有全部被星标出来,然后将它们添加到另一个可以返回的列表中。

编辑 我的问题:我需要检查该值是否包含“*”以外的任何内容,我该如何以最有效的 scala-esque 方式完成此操作?

我对正则表达式的尝试也未能给出许多误报,这似乎是一项简单的任务。我不确定正则表达式是否可行,我还想知道是否有一种方法可以应用于 .contains 或使用模式匹配

【问题讨论】:

  • 你有什么问题?检查字符串是否包含字符由 yourString.contains(yourChar) 完成,但您似乎有几个问题,没有一个是清楚的
  • @UlysseMizrahi,抱歉漫无边际。为清晰起见进行了编辑。
  • 你说集合是地图,但 "text"->"text", "text"->"**xt", "text"->"****" 不是描述Map。不能使用同一个键来引用不同的数据值。

标签: regex scala pattern-matching


【解决方案1】:

如果我理解正确,您想在地图中找到值不只是星号的键。你可以用正则表达式来做到这一点:

val reg = "\\*+".r
yourMap.filter{ case (k,v) => !reg.matches(v) }.keys

如果您对正则表达式不满意,可以使用 forall 语句:

yourMap.filter{ case(k,v) => v.forall(_ == '*') }.keys

【讨论】:

    【解决方案2】:

    !string.matches("\\*+") 会告诉你字符串是否包含* 以外的字符。

    【讨论】:

    • @Łukasz 不,这仅匹配根本不包含任何星号的字符串。
    【解决方案3】:

    也许我误解了你的问题,但如果你从地图开始,你可以尝试类似:

    val myStrings = Map("1"-> "text", "2"-> "**xt", "3"-> "****")
    val newStrings = myStrings.filterNot( _._2.contains("*") )
    

    这会给你一个只有Map(1 -> "text")的地图。

    【讨论】:

      【解决方案4】:

      试试:

      val myStrings = Map("1"-> "text", "2"-> "**xt", "3"-> "****")
      val goodStrings = myStrings.filter(_._2.exists(_ !='*'))
      

      这将查找映射中的值包含星号以外的所有情况。它将删除所有空字符串和仅星号字符串。对于这么简单的事情,即一次检查,正则表达式是多余的:您只是在寻找包含任何非星号字符的字符串。

      如果您只需要值而不是整个地图,请使用:

      val goodStrings = myStrings.values.filter(_.exists(_ !='*'))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-09
        • 2013-05-18
        • 2013-10-26
        • 1970-01-01
        • 2011-01-21
        • 2012-06-23
        • 2021-12-20
        • 2014-09-17
        相关资源
        最近更新 更多