Scala将字符串转换为raw

时间:2014-08-03 22:07:20

标签: regex scala rawstring

我知道raw String可以声明为:

val foo: String = """foo"""

val foo: String = raw"foo"

但是,如果我有一个字符串类型val,我该如何将其转换为raw?例如:

// val toBeMatched = "line1: foobarfoo\nline2: lol"
def regexFoo(toBeMatched: String) = {
     val pattern = "^.*foo[\\w+]foo.*$".r
     val pattern(res) = toBeMatched  /* <-- this line induces an exception 
       since Scala translates '\n' in string 'toBeMatched'. I want to convert
       toBeMatched to raw string before pattern matching */
}

1 个答案:

答案 0 :(得分:1)

在您的简单案例中,您可以这样做:

val a = "this\nthat"
a.replace("\n", "\\n")  // this\nthat

对于更通用的解决方案,请在Apache commons中使用StringEscapeUtils.escapeJava

import org.apache.commons.lang3.StringEscapeUtils
StringEscapeUtils.escapeJava("this\nthat")  // this\nthat

注意:您的代码实际上没有任何意义。除了String toBeMatched是无效的Scala语法之外,您的正则表达式模式已设置为仅匹配字符串"foo",而不是"foo\n""foo\\n",以及{ {1}}只有在你的正则表达式尝试捕获某些东西时才有意义,而不是。

也许(?!)你的意思是这样的?:

pattern(res)