字符串到字节并返回不起作用

时间:2016-02-29 12:52:31

标签: java

请帮我解决问题

public class MasherExample {
        static class Masher {
        static String mash(String s) {
            byte[] bytes = s.getBytes();
            byte[] mashed = new byte[bytes.length];
            for (int i = 0; i < bytes.length; i++) {
                mashed[i] = (byte) ~bytes[i];
            }
            return new String(mashed);
        }
        static String unmash(String s) {
            byte[] bytes = s.getBytes();
            byte[] unmashed = new byte[bytes.length];
            for (int i = 0; i < bytes.length; i++) {
                /*
                unmashed[i] = (byte) ~bytes[i];
                */
            }
            return new String(unmashed);
        }
    }

    public static void main(String[] args) {
        String testString = "1, 2, 3";
        if(Masher.unmash(Masher.mash(testString)).equals(testString)) {
            System.out.println("OK");
        } else {
            System.out.println("Error");
        }
    }
}

字符串没有被解码为原始字符串,unmashed函数的一些问题,请帮我解决问题,提前谢谢....

2 个答案:

答案 0 :(得分:3)

您遇到的问题是并非所有字节都是您正在使用的编码中的有效字符。例如高位设置的UTF-8字符构成多字节字符的一部分,并非所有组合都有效。

您可以使用不执行此操作的编码。

    byte[] bytes = s.getBytes(StandardCharsets.ISO_8859_1);
    byte[] mashed = new byte[bytes.length];
    for (int i = 0; i < bytes.length; i++) {
        mashed[i] = (byte) ~bytes[i];
    }
    return new String(mashed, StandardCharsets.ISO_8859_1);

答案 1 :(得分:-1)

当我在日食中运行你的程序时,我发现了一些我纠正过的错误。现在你的代码打印出来了#34; Ok&#34;而不是&#34;错误&#34;。这是以下代码:

public class MasherExample {
        static class Masher {
        static String mash(String s) {
            byte[] bytes = s.getBytes();
            byte[] mashed = new byte[bytes.length];
            for (int i = 0; i < bytes.length; i++) {
                mashed[i] = (byte) ~bytes[i];
            }
            return new String(mashed);
        }
        static String unmash(String s) {
            byte[] bytes = s.getBytes();
            byte[] unmashed = new byte[bytes.length];
            for (int i = 0; i < bytes.length; i++) {

                unmashed[i] = (byte)~bytes[i];

            }
            return new String(unmashed);
        }
    }

    public static void main(String[] args) {
        String testString = "1, 2, 3";
        if(Masher.unmash(Masher.mash(testString)).equals(testString)) {
            System.out.println("OK");
        } else {
            System.out.println("Error");
        }
    }
}