【问题标题】:Build char from string从字符串构建 char
【发布时间】:2014-03-15 20:27:17
【问题描述】:

我想允许用户通过 XML 配置文件指定 Unicode 范围。例如。他们可以将 0100..017F 声明为范围。为了让我的(Java)应用程序使用这个 char 范围,我需要将 XML 输入(String)转换为 char 类型。有什么想法吗?#

例如

String input = "0100..017F"; // I can change format of input, if enables a solution
char from = '\u0100';
char to = '\u017f';

谢谢。

【问题讨论】:

  • 所以你的意思是从字符串到字符,对吧?
  • input.charAt(0);对你没有帮助吗?我不应该得到这个问题,给我们一个更固定的输入和预期输出的例子

标签: java char


【解决方案1】:

如果它总是与该格式完全匹配,那么这就足够了:

char from = (char)Integer.parseInt(input.substring(0, 4), 16);
char to = (char)Integer.parseInt(input.substring(6), 16);

为了更灵活:

char from;
char to;
java.util.regex.Matcher m = java.util.regex.Pattern.compile(
    "^([\\da-fA-F]{1,4})(?:\\s*\\.\\.\\s*([\\da-fA-F]{1,4}))?$").matcher(input);
if (!m.find()) throw new IllegalArgumentException();
from = (char)Integer.parseInt(m.group(1), 16);
if (m.group(2) != null) {
    to = (char)Integer.parseInt(m.group(2), 16);
} else {
    to = from;
}

这允许每个字符有 1 到 4 个十六进制数字,.. 周围可能有空格,并且范围的 to 部分可以省略并假定等于 from

【讨论】:

  • 看起来不错,谢谢。除了您的子字符串,我还需要更多的字符串操作代码,因为(Unicode)输入的长度可能是 4 或 5 个字符。
  • @Damo 它不适合char,因为char 仅限于\uFFFF.. 你必须将其设为int...
  • 只是在上面测试,不确定它是否正确。只是为了回顾 rqmts,我想将一个字符串(代表一个字符)转换为所说的字符。而 (char)Integer.parseInt("0100") 将解析为 char 'd' - 我希望它解析为 '\u0100'。
  • @Damo Integer.parseInt("0100", 16);
  • +!用于花哨的灵活正则表达式。
猜你喜欢
  • 2016-01-21
  • 2013-02-04
  • 2013-03-05
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 2017-11-30
  • 2021-07-19
相关资源
最近更新 更多