Scala将字符串转换为特殊字符

时间:2018-09-12 20:29:08

标签: scala unicode escaping

因此,我试图从文件中读取转义字符,由于进行了大量清理,这是一个漫长而复杂的过程,但这并不重要。最终产品就是对象的此属性-

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,并使其实质上成为x的值。

3 个答案:

答案 0 :(得分:2)

只需使用Requested中的方法unescapeJava

commons.text.StringEscapeUtils

示例:

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

打印:

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

答案 1 :(得分:2)

将不需要的字符剥离,解析十六进制字符串,然后变成Char

Integer.parseInt("\\u0A6E".drop(2), 16).toChar
res0: Char = ੮

答案 2 :(得分:0)

您在ascii文字中具有UNICODE值。要获取unicode值,您只需忽略“ \”和“ u”,并使用slide(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>