有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

我想到了以下解决方案:

string1 + 1*hash(String1) + string2 + 2*hash(String2).

如果我像这样压缩字符串,那么我可以很容易地将它们解码成两个单独的字符串

我是不是漏掉了什么问题


共 (2) 个答案

  1. # 1 楼答案

    编码:

    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();
    

    这里我使用minimal-jsonlib,但它与任何其他JSON库都非常相似

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

  2. # 2 楼答案

    要编码:

    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);
    

    说明:
    编码字符串的格式为"<number>/<str1><str2>"。调用split(regex, limit)时,结果数组的大小最多为limit,只考虑regex的第一个匹配项。因此,即使字符串包含字符/,也可以确保生成的数组是{"<number>", "<str1><str2>"}
    substring(begin, end)返回一个字符串,从begininclusive开始,到endexclusive结束,得到一个长度为end-begin的子字符串。因为你用值(0, str1.length())来调用它,所以你得到的正是str1。最后一个调用将返回一个子字符串,该子字符串从str1.length()(也是str2的第一个字符的索引)到字符串的结尾(即str2
    参考:String javadoc page