假设我有两个字符串与分隔符“连接”。
String s1 = "aaa", s2 = "bbb"; // input strings String s3 = s1 + "-" + s2; // join the strings with dash
我可以使用s3.split("-")
获取s1
和s2
。现在,如果s1
或s2
包含短划线怎么办?假设s1
和s2
可能包含任何ASCII可打印的内容,并且我不想将不可打印的字符用作分隔符。
在这种情况下,您会建议使用哪种转义?
答案 0 :(得分:4)
如果我可以定义格式,分隔符等,我会使用OpenCSV并使用它的默认值。
答案 1 :(得分:1)
您可以使用不常见的字符序列,例如;:;
作为分隔符而不是单个字符。
答案 2 :(得分:1)
这是另一个工作解决方案,它不使用分隔符,但是它会在内爆字符串末尾连接字符串的长度,以便能够在以下情况下重新爆炸:
public static void main(String[] args) throws Exception {
String imploded = implode("me", "and", "mrs.", "jones");
System.out.println(imploded);
String[] exploded = explode(imploded);
System.out.println(Arrays.asList(exploded));
}
public static String implode(String... strings) {
StringBuilder concat = new StringBuilder();
StringBuilder lengths = new StringBuilder();
int i = 0;
for (String string : strings) {
concat.append(string);
if (i > 0) {
lengths.append("|");
}
lengths.append(string.length());
i++;
}
return concat.toString() + "#" + lengths.toString();
}
public static String[] explode(String string) {
int last = string.lastIndexOf("#");
String toExplode = string.substring(0, last);
String[] lengths = string.substring(last + 1).split("\\|");
String[] strings = new String[lengths.length];
int i = 0;
for (String length : lengths) {
int l = Integer.valueOf(length);
strings[i] = toExplode.substring(0, l);
toExplode = toExplode.substring(l);
i++;
}
return strings;
}
打印:
meandmrs.jones#2|3|4|5
[me, and, mrs., jones]
答案 3 :(得分:0)
为什么不将这些字符串存储在数组中,并在每次要将其显示给用户时使用短划线连接它们?