代码之家  ›  专栏  ›  技术社区  ›  coder25

将多行字符串转换为单行

  •  7
  • coder25  · 技术社区  · 7 年前

    考虑以下代码段

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

    我想把它转换成带分隔符的单行 ;

    a=b;c=d;
    

    我试过了

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

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

    5 回复  |  直到 4 年前
        1
  •  4
  •   Ramesh Maharjan    7 年前

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

    我希望有帮助

        2
  •  3
  •   Mario Galic    4 年前

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

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

    ;a=b;c=d
    

    或使用单个空格 " " as分离器

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

    Live long and prosper!
    
        3
  •  1
  •   user1032985 user1032985    4 年前

    因为这是谷歌在“Scala multiline to a single line”上的第一个结果,这个问题相当普遍。添加一种隐含方式可能是合理的:

    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
  •  0
  •   Dhirendra    7 年前

    试试这个

    myString.split("\n").filter(_.nonEmpty).mkString("",";",";")
    
        5
  •  0
  •   Yauheni Leaniuk    2 年前

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

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