【问题标题】:Avoid ignoring next character after "/"避免忽略“/”之后的下一个字符
【发布时间】:2014-09-29 14:49:34
【问题描述】:

我正在将 unicode 字符存储在 String 转换为 unicode 文本

例如,这里是一个字符串-

String unicode = "\u0041\u006e\u0064\u0072\u006f\u0069\u0064";

现在从这个字符串中,我想得到单独的 unicode 字符 -

u0041 u006e u0064 u0072 u006f u0069 u0064

为此,我使用以下代码 -

String[] parts = "\u0041\u006e\u0064\u0072\u006f\u0069\u0064".split("\");

但现在由于\ 之后的"split("\") 中被忽略,我收到错误消息。

如何不忽略\之后的字符?

【问题讨论】:

  • 您的字符串目前不包含任何反斜杠...它包含 7 个字符。 编译器 正在将\u.... 转换为相关的Unicode 字符。

标签: java android unicode


【解决方案1】:

\ 字符是转义字符。您收到语法错误,因为 \" 是在 String 文字中放置 " 字符的转义序列。要将\ 放在String 文字中,您需要使用\\(第一个\ 转义了第二个\ 的特殊含义)。所以语法正确的语句是:

 String[] parts = "\u0041\u006e\u0064\u0072\u006f\u0069\u0064".split("\\");

但这不会给你你想要的,因为第一个参数不包含任何\ 字符。 (另外,split() 方法需要一个正则表达式,而 \ 不是一个有效的正则表达式。)相反,它包含七个字符,代码点为 U+0041 等。也许你想要:

 String[] parts = "\\u0041\\u006e\\u0064\\u0072\\u006f\\u0069\\u0064".split("\\\\");

也许你想要

 char[] parts = "\u0041\u006e\u0064\u0072\u006f\u0069\u0064".toCharArray();

然后您可以将parts 的每个元素转换为Unicode 代码点字符串。

【讨论】:

    【解决方案2】:

    您需要转义反斜杠。您还需要再次转义反斜杠,因为 split() 将字符串视为正则表达式。使用.split("\\\\");

    【讨论】:

    • 你测试你的答案了吗?
    • split("\\") 不是唯一的问题。请注意,OP 在 String 中不会有任何 \,因为每个 \uXXXX 都将被编译器替换为对应的 Unicode 字符,因此 OP 字符串实际上等于 "Android"(只需打印 System.out.println("\u0041\u006e\u0064\u0072\u006f\u0069\u0064");,您将看到我意思)。
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 2021-07-24
    • 2013-03-24
    • 1970-01-01
    • 2017-01-11
    相关资源
    最近更新 更多