Java 将两个字符串编码/解码为一个字符串,然后返回到两个
这是一个面试问题。我在想一个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("/",
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();