Scala конвертировать строку в специальный символ - PullRequest
0 голосов
/ 12 сентября 2018

Итак, я пытаюсь прочитать экранированный символ из файла. Это долгий и сложный процесс из-за большого количества очищений, но это не имеет значения.Конечным продуктом является это свойство объекта -

props.inputSeperator: String type

Теперь это STRING.Однако значение этой строки в данном конкретном случае равно \u0001

Когда я распечатываю это, вывод будет \u0001.И длина строки props.inputSeperator равна 6. Как мне преобразовать эту строку в строку из одного символа?Это будет специальный символ, представленный \u0001 Так что длина строки будет равна 1, и при печати будет напечатан один специальный символ (\u0001)

val x: String = "\u0001"
val s = Array("\\", "u", "0", "0", "0", "1").mkString("")
println(x) //prints "?"   this is a SINGLE special character
println(s) //prints "\u0001"

Я хочу взять sи превратить его в значение х по существу.

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Уберите ненужные символы, проанализируйте шестнадцатеричную строку, превратитесь в Char.

Integer.parseInt("\\u0A6E".drop(2), 16).toChar
res0: Char = ੮
0 голосов
/ 19 сентября 2018

У вас есть значение UNICODE в литералах ascii. Чтобы получить значение Unicode, вам нужно просто проигнорировать "\" и "u" и прочитать остальную часть строки как шестнадцатеричные значения, используя скользящий (2,2) формат. Затем передайте полученную строку в «новую строку», указав нужную кодировку, т.е. UNICODE.

scala> val ar = Array("\\", "u", "0", "0", "0", "1").mkString("")
ar: String = \u0001

scala> val x = new String( ar.drop(2).sliding(2,2).toArray.map(Integer.parseInt(_, 16).toByte) , "UNICODE")
x: String = ?

scala>  x.length
res53: Int = 1

scala>  x.toArray.map(_.toByte)
res54: Array[Byte] = Array(1)

scala>

Проверка:

scala> val x1: String = "\u0001"
x1: String = ?

scala> x==x1
res55: Boolean = true

scala>
0 голосов
/ 13 сентября 2018

Просто используйте метод unescapeJava из commons.text.StringEscapeUtils:

libraryDependencies += "org.apache.commons" % "commons-text" % "1.4"

Пример:

println(org.apache.commons.text.StringEscapeUtils.unescapeJava("\\u046C"))

отпечатки:

Ѭ
...