大家好。
我想在java中连接一些没有指定格式的字符串。例如,我想连接多个对象,如签名和BigInteger和字符串,所有这些对象都转换为字符串。所以我不能使用指定的分隔符,因为每个分隔符可能存在于这些字符串中。我如何连接这些字符串,然后拆分它们?
谢谢大家。
答案 0 :(得分:3)
使用定义良好的格式,如XML或JSON。或者选择一个分隔符并在每个字符串中转义此分隔符的每个实例。或者在消息中添加每个部分的长度。例如:
10/7/14-<10 chars of signature><7 chars of BigInteger><14 chars of string>
或
10-<10 chars of signature>7-<7 chars of BigInteger>14-<14 chars of string>
答案 1 :(得分:1)
您可以转义字符串中的分隔符。例如,假设您有以下字符串:
String a = "abc;def";
String b = "12345:";
String c = "99;red:balloons";
你希望能够做这样的事情
String concat = a + delim + b + delim + c;
String[] tokens = concat.split(delim);
但是如果我们的delim是";"
那么很明显这是不够的,因为我们将有5个令牌,而不是3.我们可以使用一组可能的分隔符,在字符串中搜索这些分隔符,然后使用不在目标字符串中的第一个,但这有两个问题。首先,我们如何知道使用了哪个分隔符?第二,如果字符串中存在所有分隔符,该怎么办?这不是一个有效的解决方案,而且肯定不是很强大。
我们可以通过使用转义分隔符来解决这个问题。让我们使用":"
作为逃生分隔符。我们可以用它来说“下一个角色只是一个普通的老角色,它并不代表任何重要的东西。”
所以,如果我们这样做:
String aEscaped = a.replace(";",":;");
String bEscaped = b.replace(";",":;");
String cEscaped = c.replace(";",":;");
然后,我们可以将连接的字符串拆分为
String tokens = concat.split("[^:];")
但有一个问题:如果我们的文字实际包含":;"
或以":"
结尾怎么办?无论哪种方式,这些都会产生误报。在这种情况下,我们还必须逃避逃脱角色。它基本上和以前说的一样:“下一个角色没什么特别的。”
所以现在我们的转义字符串变为:
// note we escape our escape token first, otherwise we'll escape
// real usages of the token
String aEscaped = a.replace(":","::").replace(";",":;");
String bEscaped = b.replace(":","::").replace(";",":;");
String cEscaped = c.replace(":","::").replace(";",":;");
现在,我们必须在正则表达式中考虑到这一点。如果有人知道一个适用于此的正则表达式,他们可以随意编辑它。我发生的事情就像concat.split("(::;|[^:];)")
,但它似乎没有完成工作。解析它的工作非常简单。我为它扔了一个小的测试驱动程序,它似乎工作正常。
结果:
abc;def becomes abc:;def
ja:3fr becomes ja::3fr
; becomes :;
becomes
: becomes ::
83;:;:;;;; becomes 83:;:::;:::;:;:;:;
:; becomes :::;
Final product:
abc:;def;ja::3fr;:;;;::;83:;:::;:::;:;:;:;;:::;
Expected 'abc;def', Actual 'abc;def', Matches true
Expected 'ja:3fr', Actual 'ja:3fr', Matches true
Expected ';', Actual ';', Matches true
Expected '', Actual '', Matches true
Expected ':', Actual ':', Matches true
Expected '83;:;:;;;;', Actual '83;:;:;;;;', Matches true
Expected ':;', Actual ':;', Matches true
答案 2 :(得分:0)
使用连接运算符(+
)进行连接,如下所示:
String str1 = "str1";
String str2 = "str2";
int inte = 2;
String result = str1+str2+inte;
但要将它们再次拆分,你需要一些特殊的字符作为分隔符,因为String中的split函数适用于分隔符。