1

我有一个应用程序,其中我的用户输入是给出所需长度的字符串元素,用
:(冒号)分隔

我解析它的代码是这样的

String str[] = input.split(":");

但是当用户字符串之间有:时,我会得到错误的结果。

我尝试使用字符串 using \:,但它从未奏效。

示例用户字符串可能是这样的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";

我该如何克服呢?

4

3 回答 3

2

在拆分冒号周围使用空格:split(" : "). 这假设文本中的普通冒号通常前面没有空格。

答案不多,但否则您需要指定非拆分冒号的某种表示形式,然后处理它。比如replace("\\:", "§")拆分后replace("§", ":")

于 2013-07-16T10:18:08.530 回答
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]

现场演示:http: //ideone.com/8yeGns

于 2013-07-16T10:19:47.993 回答
0

该方法String.split()不会自动处理转义,您应该使用正则表达式自己显式定义它。这个问题可能会对你有所帮助。

这是片段,

String input = "1\\:Title 1:2\\:Title 2:3\\:Title 3";
String[] strs = input.split("(?<!\\\\):");
for (String str : strs) {
    System.out.println(str.replace("\\:", ":"));
}
于 2013-07-16T10:16:35.350 回答