Прежде всего я должен извиниться за мой плохой английский, пожалуйста, позвольте мне объяснить мой случай,
Предположим, у меня есть 2 текстовых поля для ввода пользователем. На стороне сервера я хочу объединить
две строки в виде одной строки, разделенной символом ','. Например, если пользователь
вводит первое текстовое поле как «hello world» и второе текстовое поле «foo bar»,
последняя строка должна быть "Hello World, Foo Bar". Эта строка должна быть разделена
позже для других операций, чтобы использовать его содержимое. Поэтому, когда строка разбита, как
Символ ',' используется в качестве разделителя, строка результата
будет
string [0] = "Привет, мир"
string [1] = "foo bar"
соответственно.
Конечно, это уязвимо, когда пользователь вводит символ ',' в своей строке, в результате чего
в строке, которая не может быть правильно разделена. Например, когда пользователь вводит «привет, мир»
в первом текстовом поле и «foo, bar» во втором текстовом поле, конечная строка будет
«Привет, мир, foo, bar» и результат разделения будет ошибочно иметь 4 отдельные строки.
Мне пришла в голову идея пользовательских escape-символов. То есть, если пользователь вводит символ ',', он должен начинаться с символа '/'
персонаж на стороне сервера. Например, если пользователь вводит «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] = привет /, мир
string [1] = foo /, bar
, что неверно, поскольку символ «мир» слова «d» потерян.
Кажется, что разделителем для этого случая является какой-то символ, за которым не следует / не следует ',' что вполне понятно.
Но я хочу что-то вроде «разбить строку с разделителем», который следует только за символом, который не является символом «/». Поэтому примените к моему случаю только символ «,» в середине
строки будут разбиты, поэтому окончательный результат будет правильным, как показано ниже:
строка [0] = привет /, мир
string [1] = foo /, bar
Я понимаю, что мне, возможно, придется переписать свое регулярное выражение, но я не знаю как.
Любое предложение будет приветствоваться.