如何为用户定义的输入提供转义序列

时间:2013-07-16 10:06:18

标签: java

我有一个应用程序,我的用户输入是用 : (冒号)分隔所需长度的String元素< / p>

我解析它的代码就像这样

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

但是当用户字符串之间存在 时,我会收到错误的结果。

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

示例用户字符串可能类似于 1:2:3

此处的预期值为

str[0] = "1";
str[1] = "2";
str[2] = "3";

与实际相同

但如果字符串是这样的 1:Title 12: Title 23: 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";

我怎样才能克服这个?

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]

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