【问题标题】:Convert \\ to \ in Scala在Scala中将\\转换为\
【发布时间】:2018-06-06 12:03:16
【问题描述】:

假设我有一个字符串:“\\u2026”。而且,我希望它将其更改为 "\u2026" 以在 Scala 中打印出 unicode。有没有办法做到这一点?感谢您的宝贵时间。

编辑: 让我澄清一下。由于某些情况,我有一个字符串,例如:“Following char is in unicode: \\u2026”,打印:

以下字符为 unicode:\u2026

但是,我想编辑它以便打印:

下面的 char 是 unicode:…

感谢您的回答。这就是我最终要做的。

def FixString(string: String) : String = {
  var newString = string;
  // Find the 1st problematic string
  var start = string.indexOf("\\u");
  while(start != -1) {
    // Extract the problematic string
    val end = start + 6;
    val wrongString = string.substring(start,end);
    // Convert to unicode
    val hexCode = wrongString.substring(2);
    val intCode = Integer.parseInt(hexCode, 16);
    val finalString = new String(Character.toChars(intCode));
    // Replace
    newString = string.replace(wrongString,finalString);
    // Find next problematic string
    start = string.indexOf("\\u", end);
  }
  return newString;
}

【问题讨论】:

  • 您只想删除双反斜杠吗?

标签: scala unicode


【解决方案1】:

如果你知道字符串正好是\uXXXX(未转义),那么

val stringWithBackslash = "\\u2026" // just for example
val hexCode = stringWithBackslash.substring(2) // "2026"
val intCode = Integer.parseInt(hexCode, 16) // 8230
val finalString = new String(Character.toChars(intCode)) // "…"

(代码改编自Creating Unicode character from its number)。如果没有,请使用正则表达式 """\\u(\d{4})""" 选择您想要的部分。

【讨论】:

    【解决方案2】:

    关于使用String.replace 方法的问题的简短回答:

    "\\u2026".replace("\\\\", "\\")
    

    请注意,我必须将每个反斜杠加倍,因为反斜杠字符也开始 Java 字符串转义序列。

    如果您希望 JVM 执行 UTF-8 IO(本题不需要),请设置 Java 系统属性file.encoding=UTF-8,如下所示:

    $ sbt console
    Welcome to Scala 2.12.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_151).
    Type in expressions for evaluation. Or try :help.
    
    scala> System.setProperty("file.encoding","UTF-8")
    res0: String = UTF-8
    
    scala> val strWithError: String = "\\u2026"
    strWithError: String = \u2026
    
    scala> val prefixedString: String = strWithError.replace("\\\\", "\\") // corrected string as per OP
    prefixedString: String = \u2026
    

    这里是奖金信息,改编自https://stackoverflow.com/a/16034658/553865(由 Alexey Romanov 的回答引用):

    scala> val utfString: String = strWithError.replace("\\u", "") // utf code point
    utfString: String = 2026
    
    scala>   val intCode = Integer.parseInt(utfString, 16)
    intCode: Int = 8230
    
    scala>   val symbol = new String(Character.toChars(intCode))
    symbol: String = …
    

    【讨论】:

      猜你喜欢
      • 2014-10-04
      • 2014-10-14
      • 2016-04-14
      • 1970-01-01
      • 2021-04-19
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多