首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用开关语句的十六进制转换器

使用开关语句的十六进制转换器
EN

Code Review用户
提问于 2012-07-06 09:45:01
回答 1查看 2.3K关注 0票数 13

我需要一些帮助来改进我的代码,并想知道我是否有更好的方法来执行以下操作:

代码语言:javascript
复制
StringBuilder buf = new StringBuilder(node.length() + 8);
        for (int i=0, n=node.length(); i<n; i++) {
            char c = node.charAt(i);
            String hexadecimal = "";
            switch (c) {
                case '"': hexadecimal = "\\22"; break;
                case '&': hexadecimal = "\\26"; break;
                case '\'': hexadecimal = "\\27"; break;
                case '/':  hexadecimal = "\\2f"; break;
                case ':': hexadecimal = "\\3a"; break;
                case '<': hexadecimal = "\\3c"; break;
                case '>': hexadecimal = "\\3e"; break;
                case '@': hexadecimal ="\\40"; break;
                case '\\':hexadecimal = "\\5c"; break;
                default: {
                    if (Character.isWhitespace(c)) {
                        hexadecimal = "\\20";
                    }else if(c > 127){
                        hexadecimal = "\\" + Integer.toHexString(c) + "\\";
                    }
                    else {
                        hexadecimal = String.valueOf(c);
                    }
                }
            }
            buf.append(hexadecimal);
        }
        return buf.toString();

我不喜欢switch语句,它只是根据情况设置变量(hexadecimal)。我觉得有更好的方法来做到这一点,比如使用散列映射。我需要代码是灵活的,这样添加新的字符和设置十六进制是容易的。

EN

回答 1

Code Review用户

发布于 2012-07-06 11:32:07

哈希映射通常是避免开关语句的一个好主意。它可以与战略和抽象工厂模式( 就是这样 作为 在……里面 这些 示例 )结合使用。

然而,策略模式对于您的问题来说是过分的。简单的hashmap如下所示

代码语言:javascript
复制
Map<Character, String> hexMap = new HashMap<Character, String>();
hexMap.put('\"', "\\22");
hexMap.put('\n', "\\20");
// puts more stuff in map...

 for (int i=0, n=node.length(); i<n; i++) {
     char c = node.charAt(i);
     buf.append(hexMap.get(c));
 }

但是快速搜索"java字符到十六进制“会产生这些 结果。我最喜欢的是

代码语言:javascript
复制
StringBuilder buf = new StringBuilder(node.length() + 8);

    for (int i = 0; i < node.length(); ++i) {
        char ch = node.charAt(i);
        buf.append(String.format("\\%1$x", (ch & 0xFFFF)));
    }

return buf.toString();

编辑:忘了说,不要使用神奇的数字。我不知道8在你的程序中在做什么,我也不需要耐心尝试推断。

票数 29
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/13389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档