将多行字符串转换为单行

convert multi line string to single line

考虑以下片段

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

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

a=b;c=d;

我试过了

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

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

但是没用。

试试这个

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

我试过 \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;

希望对你有帮助

基于

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

输出

;a=b;c=d

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

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

输出

Live long and prosper!

因为它是“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)