【问题标题】:Scala strip trailing whitespaceScala 去除尾随空格
【发布时间】:2011-08-28 03:53:03
【问题描述】:

Scala String 方法(在类StringOpsstripMargin 从多行String 的每一行中删除前导空格,直到并包括管道(|)字符(或其他指定的分隔符) )。

是否有等效的方法可以从每行中删除尾随空格?

我快速浏览了 Scaladocs,但找不到。

【问题讨论】:

    标签: scala string


    【解决方案1】:

    Java String 方法 trim 删除开头和结尾的空格:

    scala> println("<"+"  abc  ".trim+">")
    <abc>
    

    【讨论】:

    • 但这只会分别从多行字符串的第一行和行中删除空格。
    【解决方案2】:

    您可以轻松地为此使用正则表达式:

    input.replaceAll("""(?m)\s+$""", "")
    

    正则表达式中的(?m) 前缀使其成为多行正则表达式。 \s+ 匹配 1 个或多个空白字符,$ 匹配行尾(由于多行标志)。

    【讨论】:

      【解决方案3】:

      Split 'n' trim 'n' mkString(就像一个摇滚乐手):

      val lines = """ 
      This is 
       a test 
        a   foolish   
          test   
          a
      test 
      t 
       """
      
      lines.split ("\n").map (_.trim).mkString ("\n")
      
      res22: String = 
      
      This is
      a test
      a   foolish
      test
      a
      test
      t
      

      【讨论】:

      • 注意:split("\n") 使用正则表达式匹配。使用 split('\n') 似乎可以更好地传达预期的含义(在最近的世界中不会有性能差异,因为 split 无论如何都是单个字符模式的特殊大小写 - 请参阅Java split String performances
      【解决方案4】:

      这可能不是最有效的方法,但您也可以这样做:

      val trimmed = str.lines map { s => s.reverse.dropWhile ( c => c == ' ').reverse.mkString(System.getProperty("line.seperator"))
      

      【讨论】:

      • 不错的lines,但_ == ' ' 是可能的
      • 是的,我发帖后就想到了。
      【解决方案5】:

      也许:s.lines.map(_.reverse.stripMargin.reverse).mkString("\n") 或用System.getProperty("line.separator") 代替"\n"?!

      【讨论】:

        【解决方案6】:
        str.reverse.dropWhile(_ == ' ').reverse
        

        【讨论】:

          猜你喜欢
          • 2019-12-16
          • 1970-01-01
          • 2021-10-22
          • 1970-01-01
          • 2011-10-02
          • 2017-01-22
          • 2015-04-27
          • 1970-01-01
          • 2012-02-09
          相关资源
          最近更新 更多