복붙노트

[SCALA] 스칼라에서 보간 문자열에 큰 따옴표를 삽입하는 방법

SCALA

스칼라에서 보간 문자열에 큰 따옴표를 삽입하는 방법

문제가 내 기능의 모든 따옴표를 이스케이프를 갖는

(그것의 기본적인 사용법 - 내가 문자열을 찾을 경우>에서의하지 문자열 추가 "가 시작하면, 아무것도하지 않고 종료)

코드 스 니펫 :

  def putTheDoubleQuotes(value: Any): Any = {
    value match {
      case s: String => s //do something ...
      case _  => s"\"$value\"" //not working
    }
  }

근무 유일했다 :

이것에 대한 더 나은 구문이있다?

그것은 끔찍한 외모와 IDE (IntelliJ를) 빨간색으로 표시 그것 (하지만 당신이 정말 날 화나게하는 그것을 실행할 수 있습니다 !!!!!)

해결법

  1. ==============================

    1.이 스칼라의 버그입니다 :

    이 스칼라의 버그입니다 :

    하지만 어쩌면 당신은 사용할 수 있습니다 :

    scala> import org.apache.commons.lang.StringEscapeUtils.escapeJava
    import org.apache.commons.lang.StringEscapeUtils.escapeJava
    
    scala> escapeJava("this is a string\nover two lines")
    res1: java.lang.String = this is a string\nover two lines
    
  2. ==============================

    2.당신은 너무 "" "작동"$ 값을 "" "" "이야, 트리플 인용 문자열에 따옴표를 이스케이프 할 필요가 없습니다. 틀림없이,이 중 잘 보이지 않는다.

    당신은 너무 "" "작동"$ 값을 "" "" "이야, 트리플 인용 문자열에 따옴표를 이스케이프 할 필요가 없습니다. 틀림없이,이 중 잘 보이지 않는다.

  3. ==============================

    3.(또한 스칼라 추적기 언급) 다른 용액을 사용하는 것

    (또한 스칼라 추적기 언급) 다른 용액을 사용하는 것

    case _ => s"${'"'}$value${'"'}"
    

    그럼에도 불구하고 추한,하지만 때로는 아마 삼중 따옴표 선호 할 수있다.

    그것은 이스케이프 시퀀스 $는 "2.12에 대한 SIP-24의 일환으로 제안 된 것 같다 :

    case _ => s"$"$value$""
    

    그것은 다른 논쟁 제안을 포함로이 SIP는 허용되지 않았다. 현재 보간에서 탈출 "사전 SIP / 미니 SIP $로 2.13에서 구현"이스케이프 시퀀스 $를 얻기위한 노력이있다.

  4. ==============================

    4.사용 사례, 그들은 쉽게 좋은 구문을 달성 할 수 있습니다.

    사용 사례, 그들은 쉽게 좋은 구문을 달성 할 수 있습니다.

    scala> implicit class `string quoter`(val sc: StringContext) {
         | def q(args: Any*): String = "\"" + sc.s(args: _*) + "\""
         | }
    defined class string$u0020quoter
    
    scala> q"hello,${" "*8}world"
    res0: String = "hello,        world"
    
    scala> "hello, world"
    res1: String = hello, world       // REPL doesn't add the quotes, sanity check
    
    scala> " hello, world "
    res2: String = " hello, world "   // unless the string is untrimmed
    

    패키지 개체 어딘가에서 암시 적 거리를 다람쥐.

    당신은 물론 Q 외에 보간 뭔가를, 이름을 지정할 수 있습니다.

    지난 주, 누군가가 backquoted 식별자를 사용할 수있는 능력의 ML에 요청했다. 지금 당신은 res3하지만 res4을 수행 할 수 있습니다

    scala> val `"` = "\""
    ": String = "
    
    scala> s"${`"`}"
    res3: String = "
    
    scala> s"hello, so-called $`"`world$`"`"
    res4: String = hello, so-called "world"
    

    그냥 날에 발생한 또 다른 아이디어는 F-보간 이미 문자열을 마사지하는 몇 가지 작업을 수행이었다. 예를 들어, "% n"은 지능적으로 처리해야한다. 그것은 동시에, 그것은 기본 포맷에 통과하지 않을 추가로 탈출 "%의 q"를 처리 할 수 ​​있습니다.

    즉 같을 것이다 :

    scala> f"%qhello, world%q"
    <console>:9: error: conversions must follow a splice; use %% for literal %, %n for newline
    

    즉 가치 향상 요청합니다.

    업데이트 : 단지 8 진수는 아직 보간에 사용되지되지 않은 것으로 나타났습니다 :

    scala> s"\42hello, world\42"
    res12: String = "hello, world"
    
  5. ==============================

    5.이것은 나를 위해 문제를 해결,이 밖으로을 시험하고이 내가 사용하는 것입니다.

    이것은 나를 위해 문제를 해결,이 밖으로을 시험하고이 내가 사용하는 것입니다.

    raw""" 
       Inside this block you can put "as many" quotes as you "want" and even "${5 + 7}" interpolate inside the quotes 
    """
    

    http://docs.scala-lang.org/overviews/core/string-interpolation.html#the-raw-interpolator

  6. ==============================

    6.이미 언급 한 바와 같이,이 스칼라에서 알려진 버그입니다. 해결 방법은 \ 042을 사용하는 것입니다.

    이미 언급 한 바와 같이,이 스칼라에서 알려진 버그입니다. 해결 방법은 \ 042을 사용하는 것입니다.

  7. ==============================

    7.간단한 방법 : -

    간단한 방법 : -

    val str="abc"
    println(s"$str") //without double quotes
    println(s"""\"$str\"""") // with double quotes
    
  8. ==============================

    8.방법에 대한

    방법에 대한

    의 "{\" "+ 변수 +"\ ""} "문자열에 삽입 따옴표이 $입니다"

  9. ==============================

    9.크게 그러므로 나는이 버전을 만들어 내 경우에 사용되는 :

    크게 그러므로 나는이 버전을 만들어 내 경우에 사용되는 :

    object StringUtil{
        implicit class StringImprovements(s: String) {
            def quoted = "\""+s+"\""
        }
    }
    
    val myStatement = s"INSERT INTO ${tableName.quoted} ..."
    
  10. ==============================

    10.몇 단계 더 @Pascalius 제안을 복용합니다. 클래스 StringImprovements를 확장하고 상속 AnyVal.

    몇 단계 더 @Pascalius 제안을 복용합니다. 클래스 StringImprovements를 확장하고 상속 AnyVal.

    object StringUtil{
        implicit class StringImprovements(val s: String) extends AnyVal {
            def dqt = "\""+s+"\""    // double quote
            def sqt = s"'$s'"        // single quote
        }
    }
    

    스칼라은 내재적 개의 확장 방법 및 DQT SQT 호출에 중간 오브젝트를 작성 StringImprovements 클래스를 사용한다. 그럼에도 불구하고, 우리는이 객체의 생성을 제거하고 AnyVal에서 클래스 상속을하여 성능을 향상시킬 수 있습니다. 스칼라 컴파일러 단지 직접 메소드를 호출함으로써 물체를 대체 이러한 경우 특별히 값 유형을 제공합니다.

    여기라는 변수 (스트링 불리언) 및 보간 문자열 함수를 사용 혼용 암시 클래스를 사용하여 위의 간단한 예이다.

    import StringUtil._
    abstract class Animal {
       ...
       override def toString(): String = s"Animal:${getFullName().dqt}, CanFly:$canFly, Sound:${getSound.dqt}"
     }
    
  11. from https://stackoverflow.com/questions/21086263/how-to-insert-double-quotes-into-string-with-interpolation-in-scala by cc-by-sa and MIT license