将String符号转换为char

时间:2014-09-11 16:47:31

标签: java string stringbuffer

我正在实施单字母替换算法。键和值存储在HashMap中,并使用StringBuffer类的变量作为输入字符串的参数:

public class Mono {
    private StringBuffer source;
    private Map<String, String> alphabet;

public Mono(String source) {
    this.source = new StringBuffer(source);
    alphabet = new HashMap<>();
    alphabet.put("a", "f");
    alphabet.put( //... etc.
}

public StringBuffer startEncrypt() {
        for (int i = 0; i < source.length(); i++) {
            for (Map.Entry entry : alphabet.entrySet()) {
                if (entry.getKey().toString().equals(source.charAt(i))) {
                    source.setCharAt(i, entry.getValue().toString());
                }
            }
        }

        return source;
    }
}

我在这里遇到了将字符串转换为字符的问题:source.setCharAt(i, entry.getValue().toString());

那么,我的问题是如何做到这一点?或者是否有另一种更换角色的更好方法?

感谢。

3 个答案:

答案 0 :(得分:3)

你可以使用charAt(0)获取字符串的第一个字符......就像你已经为你的密钥做的那样。请注意,如果您使用参数化Map.Entry而不是原始类型,则您不需要toString调用:

for (Map.Entry<String, String> entry : alphabet.entrySet()) {
    // TODO: Should this be source.charAt(i)?
    if (entry.getKey().equals(source.charAt(0))) {
        source.setCharAt(i, entry.getValue().charAt(0));
    }
}

那就是说,如果你的所有字符串都只是一个字符,为什么不使用Map<Character, Character>?此外,迭代所有地图中的条目效率低下,几乎肯定您想要做什么。我怀疑你实际上想要类似的东西:

private final Map<Character, Character> mappings;

public String substitute(String input) {
    char[] chars = input.toCharArray();
    for (int i = 0; < chars.length; i++) {
        Character sub = mapping.get(chars[i]);
        if (sub != null) {
            chars[i] = sub;
        }
    }
    return new String(chars);
}

答案 1 :(得分:1)

尝试:

entry.getValue().toString().chartAt(0)

答案 2 :(得分:0)

不确定是否符合您的需求,但我会这样:

public class Mono {
    private StringBuffer source;
    private Map<Character, Character> alphabet;

    public Mono(String source) {
        this.source = new StringBuffer(source);
        alphabet = new HashMap<>();
        alphabet.put('a', 'f');
        alphabet.put( //... etc.
    }

    public StringBuffer startEncrypt() {
        for (int i = 0; i < source.length(); i++) {
            for (Character key : alphabet.keySet()) {
                if (source.charAt(0) == key) {
                    source.setCharAt(i, alphabet.get(key));
                }
            }
        }

        return source;
    }
}

它更具可读性,您不需要任何类型转换。更简单更好:)