2015-06-07 2 views
7

Что является самым чистым методом для добавления символа $ в строковый литерал?Знак знака доллара в строках

Лучшее решение, которое я придумал до сих пор, это """${"$"}...""", который выглядит уродливым для меня.

ответ

8

Чтобы избежать знак доллара внутри строкового литерала, используйте символ обратной косой черты:

"\$" 

Чтобы избежать этого в raw строка литерала ("""..."""), обходной путь, который вы предоставили, на самом деле является самым простым решением на данный момент. В трекере ошибок есть проблема, которую вы можете сыграть и/или проголосовать за: KT-2425.

+0

Эта проблема в YouTrack (KT-2425) отмечена как 'open', но на самом деле это больше не существует как проблема, см. Другой ответ ниже. –

+1

Ничего не изменилось в связи с этой проблемой: значки доллара могут (и могли быть) сбрасываться с обратной косой чертой в обычных строках, но не могут внутри строк строковых литералов ('" "" ... "" "'). Однако мой ответ касался только последнего, не знаю, почему, я исправлю это. –

+0

А теперь ясно. –

3

Не похоже, чтобы вы правильно вставили свой код, поскольку у вас есть только три двойных кавычки.

Во всяком случае, лучший способ сделать это, чтобы просто избежать знак доллара следующим образом:

"\$" 
+0

Вы не можете убежать внутри необработанной строки, которая, я считаю, является целью вопроса. – jkschneider

+0

@jkschneider вы можете в текущем Kotlin, вопрос и ваш комментарий устарели для текущего состояния Kotlin. Этот ответ правильный. –

+1

@JaysonMinard нет, вы не можете сделать это в необработанной строке, пожалуйста, прочитайте эту проблему. –

1

В текущем Котлин 1.0 (и бет) вы можете просто уйти с обратной косой черты "\$"

Этот тест прохождение блок доказывает случаи:

@Test public fun testDollar() { 
    val dollar = '$' 

    val x1 = "\$100.00" 
    val x2 = "${"$"}100.00" 
    val x3 = """${"$"}100.00""" 
    val x4 = "${dollar}100.00" 
    val x5 = """${dollar}100.00""" 

    assertEquals(x5, x1) 
    assertEquals(x5, x2) 
    assertEquals(x5, x3) 
    assertEquals(x5, x4) 

    // you cannot backslash escape in """ strings, therefore: 

    val odd = """\$100.00""" // creates "\$100.00" instead of "$100.00" 
    // assertEquals(x5, odd) would fail 
} 

Все версии делают строку "$100.00" за исключением один нечетный случай в конце.

+3

«Один странный случай в конце» - это именно то, о чем спрашивал ОП. –

+1

ну, теперь все опции видны ;-) –

Смежные вопросы