在scala中将多行字符串转换为单行

时间:2017-08-15 08:55:08

标签: scala

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

我想用deliminater将其转换为单行;

a=b;c=d;  我尝试了myString.replaceAll("\r",";")myString.replaceAll("\n",";"),但它没有工作

4 个答案:

答案 0 :(得分: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;

我希望它有所帮助

答案 1 :(得分:1)

基于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!

答案 2 :(得分:0)

试试这个

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

答案 3 :(得分:0)

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