【问题标题】:convert multi line string to single line将多行字符串转换为单行
【发布时间】:2017-08-15 08:55:07
【问题描述】:

考虑以下sn-p

val myString =
  """
    |a=b
    |c=d
    |""".stripMargin

我想将其转换为带有分隔符;的单行

a=b;c=d;

我试过了

myString.replaceAll("\r",";")

myString.replaceAll("\n",";")

但是没有用。

【问题讨论】:

  • 使用\n 而不是\r
  • 试过不行
  • 它对我有用 :) 请参阅下面的答案
  • 如果你在 Windows 上,你可能需要两个 "\r\n" - 它仍然认为它正在使用电传打字机,如果它没有以回车结束一行,你的终端将开始在上一行输入...
  • 是的,但是如果我在部署后在 Unix 机器上使用它怎么办。在本地它是 windows 但在 unix 上部署

标签: string scala multiline


【解决方案1】:

我尝试使用 \n 并且它有效

scala> val myString = """
     | a=b
     | c=d
     | """.stripMargin
myString: String =
"
a=b
c=d
"

scala> myString.replaceAll("\n",";")
res0: String = ;a=b;c=d;

scala> res0.substring(1, myString.length)
res1: String = a=b;c=d;

希望对你有帮助

【讨论】:

  • 使用 System.lineSeparator() 而不是 "\n" 允许它在 Windows 上工作
【解决方案2】:

基于https://stackoverflow.com/a/25652402/5205022

"""
  |a=b
  |c=d
  |""".stripMargin.linesIterator.mkString(";").trim

哪个输出

;a=b;c=d

或使用单个空格 " " 作为分隔符

"""
  |Live long
  |and
  |prosper!
  |""".stripMargin.linesIterator.mkString(" ").trim

哪个输出

Live long and prosper!

【讨论】:

    【解决方案3】:

    因为它是“Scala 多行到单行”的第一个 Google 结果,而且问题很笼统。添加隐式方式可能是合理的:

    implicit class StringExtensionImplicits(s: String) {
    
        def singleLine: String = {
          singleLine('|')
        }
    
        def singleLine(marginChar: Char): String = {
          s.stripMargin(marginChar).replace('\n', ' ')
        }
    
    }
    

    现在你可以:

    logger.info(
      """I'm a so long log entry that some devs who like vim don't like me.
        |But you can help them to keep patience.""".singleLine)
    

    【讨论】:

      【解决方案4】:

      试试这个

      myString.split("\n").filter(_.nonEmpty).mkString("",";",";")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-08
        • 1970-01-01
        • 2016-12-27
        • 1970-01-01
        • 1970-01-01
        • 2020-08-17
        • 2014-08-28
        相关资源
        最近更新 更多