【发布时间】:2011-11-27 11:35:57
【问题描述】:
首先我要为我糟糕的英语道歉,请让我解释一下我的情况, 假设我有 2 个文本框供用户输入。在服务器端,我想结合 两个字符串作为单个字符串,由 ',' 字符分隔。例如,如果用户 将第一个文本框输入为“hello world”,将第二个文本框输入为“foo bar”, 最后的字符串应该是“hello world,foo bar”。此字符串需要拆分 稍后用于其他操作以利用其内容。所以当字符串被分割时,作为 ',' 字符用作分隔符,结果字符串 将会 字符串[0] = "你好世界" 字符串[1] = "富吧" 分别。
当然,当用户在其字符串中键入“,”字符时,这很容易受到攻击,导致 在无法正确拆分的字符串中。例如,当用户输入“hello,world”时 在第一个文本框中和第二个文本框中的 "foo,bar" 中,最终的字符串将是 "hello,world,foo,bar" 和拆分结果将错误地是 4 个单独的字符串。
我想出了一个自定义转义字符的想法。也就是说,如果用户输入“,”字符,则必须在前面加上“/” 服务器端的字符。例如,如果用户输入“hello,world”和“foo,bar” ,最后的字符串将是“hello/,world,foo/,bar”,现在可以拆分,因为确切的 分隔符是已知的,它是单个 ',' 字符,前面没有 '/' 字符。
我写了一些java代码来处理它如下:
String testText = "hello/,world,foo/,bar";
String[] split = testText.split("[^/],");
for(int i=0; i<split.length; i++)
{
System.out.println(split[i]);
}
返回的结果是
字符串[0] = 你好/,世界
字符串[1] = foo/,bar
这是不正确的,因为单词“world”的“d”字符丢失了。 似乎这种情况下的分隔符是一些不/后跟''的字符,这是可以理解的。 但我想要类似“用分隔符'分割字符串',它只跟随不是'/'字符的字符。所以适用于我的情况,中间只有','字符 的字符串将被拆分,因此最终结果将是正确的,如下所示:
字符串[0] = 你好/,世界
字符串[1] = foo/,bar
我意识到我可能必须重写我的正则表达式,但我不知道如何。 欢迎提出任何建议。
【问题讨论】:
-
尽量避免加入字符串。有太多方法可以做错事。例如,您也需要转义
/s。有人可以输入“hello/”和“world”。这将导致 '"hello/,world"'。 -
“欢迎提出任何建议。”提出问题。