我有一个应用程序,我的用户输入是用 :
(冒号)分隔所需长度的String元素< / p>
我解析它的代码就像这样
String str[] = input.split(":");
但是当用户字符串之间存在 : 时,我会收到错误的结果。
我尝试使用 \:
来使用该字符串,但它从未奏效。
示例用户字符串可能类似于 1:2:3
此处的预期值为
str[0] = "1";
str[1] = "2";
str[2] = "3";
与实际相同
但如果字符串是这样的 1:Title 1
:2: Title 2
:3: Title 3
此处的预期值为
str[0] = "1: Title 1";
str[1] = "2: Title 2";
str[2] = "3: Title 3";
并且与实际不一样,
str[0] = "1";
str[1] = "Title 1";
str[2] = "2";
str[3] = "Title 2";
str[4] = "3";
str[5] = "Title 3";
我怎样才能克服这个?
答案 0 :(得分:2)
在分裂冒号周围使用空格:split(" : ")
。这假定文本中的普通冒号通常没有前面的空格。
答案不是很多,但除此之外,你需要指定一些非分裂冒号的表示,并处理它。例如replace("\\:", "§")
和分割replace("§", ":")
之后。
答案 1 :(得分:0)
方法String.split()
不会自动处理转义,您应该使用正则表达式自己定义它。 This question可能会对您有所帮助。
以下是摘录
String input = "1\\:Title 1:2\\:Title 2:3\\:Title 3";
String[] strs = input.split("(?<!\\\\):");
for (String str : strs) {
System.out.println(str.replace("\\:", ":"));
}
答案 2 :(得分:0)
以下应该适合你:
String str = "1:Title 1 : 2: Title 2 : 3: Title 3";
String[] arr = str.split("\\s*:(?=\\s*\\d)\\s*");
System.out.printf("Split: %s%n", Arrays.toString(arr));
<强>输出:强>
Split: [1:Title 1, 2: Title 2, 3: Title 3]