Java 将两个字符串编码/解码为一个字符串,然后返回到两个

Java 将两个字符串编码/解码为一个字符串,然后返回到两个,java,string,decode,encode,Java,String,Decode,Encode,这是一个面试问题。我在想一个java解决方案。这个问题似乎很简单,这里有陷阱吗 我正在考虑以下解决方案: string1 + 1*hash(String1) + string2 + 2*hash(String2). 如果我像这样压缩字符串,那么我可以很容易地将它们解码成两个单独的字符串 我在问题中遗漏了什么吗?编码: String encoded = ""+str1.length()+"/"+str1+str2; 要解码: String[] temp = encoded.split("/",

这是一个面试问题。我在想一个java解决方案。这个问题似乎很简单,这里有陷阱吗

我正在考虑以下解决方案:

string1 + 1*hash(String1) + string2 + 2*hash(String2).
如果我像这样压缩字符串,那么我可以很容易地将它们解码成两个单独的字符串

我在问题中遗漏了什么吗?

编码:

String encoded = ""+str1.length()+"/"+str1+str2;
要解码:

String[] temp = encoded.split("/", 2);
int length1 = Integer.parseInt(temp[0]);
String str1 = temp[1].substring(0, length1);
String str2 = temp[1].substring(length1);
说明:
编码字符串的格式为
“/”
。调用
split(regex,limit)
时,结果数组的大小最多为
limit
,只考虑
regex
的第一个匹配项。因此,即使字符串包含字符
/
,也可以确保生成的数组将是
{“,”}

substring(begin,end)
返回一个从
begin
包含开始到
end
独占结束的字符串,得到长度为
end begin
的子字符串。因为您使用值
(0,str1.length())
调用它,所以得到的正是
str1
。最后一次调用将从
str1.length()
(也是
str2
的第一个字符的索引)返回一个子字符串到字符串的结尾(即
str2
的结尾)。
参考:编码:

String encoded = new JsonArray().add(str1).add(str2).toString();
解码:

JsonArray arr = JsonArray.readFrom(encoded);
String str1 = arr.get(0).asString();
String str2 = arr.get(1).asString();
这里我使用lib,但它与任何其他JSON库都非常相似


请注意,发明将信息编码到字符串中的新格式通常不是一个好主意,因为现有的格式(xml、json、yaml等)已经解决了符号转义和异常处理等所有可能的问题。

一种方法是使用第一个字符串的长度

// encode
String concat = string1 + string2;

// decode
String str1 = concat.substring( 0, string1.length() );
String str2 = concat.substring( string1.length(), concat.length() );
另一种方法是使用分隔符。但分隔符字符不应包含在任何要联接的字符串中

// encode
String concat = "hello" + "`" + "world!";

// decode
String[] decoded = concat.split("`");
String str1 = decoded[0];
String str2 = decoded[1];

为什么不简单地像HTTP授权头那样传输用户名和密码呢<代码>基本Base64.enc(用户名+“:“+密码)?解码用户名和密码的base64字符串将返回
username:password
,您只需将其按
字符拆分,如果我的字符串包含“:”?i、 e.username=joh:n password=do:e.我只需要使用一个不包含在允许的字母表中的字符,这就非常简单了。但是第二个散列函数的用途是什么?你需要它做什么?您需要第一个哈希函数做什么?如何区分字符串是否已结束,前一个字符串的哈希值是否开始?希望你明白我的意思。解决您的问题的方法可能是:
len(string1)+string1+string2
,也不推荐使用readfrom:JsonArray arr=Json.parse(encoded.asArray();