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

arknldoa  于 2023-04-12  发布在  Scala
关注(0)|答案(6)|浏览(227)

考虑以下代码片段

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

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

a=b;c=d;

我尽力了

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

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

但没有成功

ipakzgxi

ipakzgxi1#

我用\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;

希望能帮上忙

pgpifvop

pgpifvop2#

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

798qvoo83#

因为这是“Scala multiline to a single line”的第一个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)
wwwo4jvm

wwwo4jvm4#

试试这个

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

x4shl7ld5#

如果有人想知道如何创建多行字符串:

val myString = "This is " +
               "my string"

输出为This is my string。您也可以在这里使用s字符串来实现变量

laik7k3q

laik7k3q6#

你可以用

val myString =
      """
        |a=b
        |c=d
        |""".stripMargin.lines.mkString(";")

linesIterator自scala 2.11起已弃用

相关问题