请帮我解决问题
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
函数的一些问题,请帮我解决问题,提前谢谢....
答案 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");
}
}
}