0

I know raw String can be declared as:

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

or

val foo: String = raw"foo"

However, if I have a string type val, how can I convert it to raw? For example:

// 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 */
}
SexyNerd
  • 934
  • 2
  • 11
  • 18

1 Answers1

1

In your simple case, you can do this:

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

For a more general solution, use StringEscapeUtils.escapeJava in Apache commons.

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

Note: your code doesn't actually make any sense. Aside from the fact that String toBeMatched is invalid Scala syntax, your regex pattern is set up such that it will only match the string "foo", not "foo\n" or "foo\\n", and pattern(res) only makes sense if your regex is attempting to capture something, which it's not.

Maybe (?!) you meant something like this?:

def regexFoo(toBeMatched: String) = {
  val pattern = """foo(.*)""".r
  val pattern(res) = toBeMatched.replace("\n", "\\n") 
}
regexFoo("foo\n")  //  "\\n"
dhg
  • 50,861
  • 7
  • 115
  • 141