Как добавить строку, содержащую '=' в список строк? - PullRequest
0 голосов
/ 12 января 2011

Регулярное выражение используется для синтаксического анализа текста, который содержит '=', и для помещения разделенной строки в список строк, такой как пара значений ключа.

Но если значение содержит '=', оно не может использовать list.add (key3 + '=' + 'number = 10');

key1 this's done
key2 that costs 10 dollars
key3 number=10 // invalid data, error prompt.
...

как решить? Спасибо.

Edit:

Спасибо всем за помощь.

Если мне нужно добавить в ключ строку, содержащую '=', как я могу ее решить?

например, анализируемый текст может выглядеть так:

maleConsumer=john 1
maleConsumer=eric 2
femaleConsumer=mary 2
maleConsumer=john 8
...

Я использую regex reg = '\ b \ S + \ b' для разбора текста и для добавления maleconsumer = john в ключ списка строк, так что в списке строк запись Джона будет:

maleConsumer=john 9 // maleconsumer=john is key, 9 is value

В таком случае, как я могу это сделать?

Еще раз спасибо всем за помощь.

Ответы [ 6 ]

6 голосов
/ 12 января 2011

Это прекрасно работает в Delphi

var
    sl: TStringList;
begin
    sl := TStringList.Create;
    try
        sl.Add('key1=this''s done');
        sl.Add('key2=that costs 10 dollars');
        sl.Add('key3=number=10');
        ShowMessage(sl.Values['key3']); // Displays number=10
    finally
        sl.Free;
    end;
end;

Это лучше и работает

var
    sl: TStringList;
begin
    sl := TStringList.Create;
    try
        sl.Values['key1'] := 'this''s done';
        sl.Values['key2'] := 'that costs 10 dollars';
        sl.Values['key3'] := 'number=10';
        ShowMessage(sl.Values['key3']); // Displays number=10
    finally
        sl.Free;
    end;
end;

Кстати, вы можете указать разделитель с помощью TStringList.NameValueSeparator

Использование NameValueSeparator для разрешения = в ключе

var
    sl: TStringList;
begin
    sl := TStringList.Create;
    try
        // Select a separater you are sure will never be used
        sl.NameValueSeparator := '|';

        sl.Values['maleConsumer=john'] := '1';
        sl.Values['maleConsumer=eric'] := '2';
        sl.Values['femaleConsumer=mary'] := '2';
        sl.Values['maleConsumer=john'] := '8';

        ShowMessage(sl.Values['maleConsumer=john']); // Displays 8
    finally
        sl.Free;
    end;
end;
2 голосов
/ 12 января 2011

Проверьте, содержит ли значение '=':

if(value.indexOf('=') != -1){
 //error prompt
}
1 голос
/ 13 января 2011

Если вы используете Delphi 2009 или более позднюю версию, используйте TDictionary вместо TStringList. Таким образом вы избежите всех этих хаков, необходимых для правильной работы TStringList.

1 голос
/ 12 января 2011

Delphi:

var
  LStringList: TStringList;
  LStrValue: string;
begin
  LStringList := TStringList.Create;
  try
    // set the value of a key
    LStringList.Values['a key'] := 'a value';
    // get the value of a key
    LStrValue := LStringList.Values['a key'];
  finally
    FreeAndNil(LStringList);
  end;// trye
end;
1 голос
/ 12 января 2011

для Delphi; Вы можете установить Delimiter и QuoteChar для своих строк. Пример:

  cars := TStringList.Create;
  // Now add some cars to our list - using the DelimitedText property
  // with overriden control variables
  cars.Delimiter := ' ';        // Each list item will be blank separated
  cars.QuoteChar := '|';        // And each item will be quoted with |'s
  cars.DelimitedText := '|Honda Jazz| |Ford Mondeo| |Jaguar "E-type"|';

смотрите здесь для деталей.

1 голос
/ 12 января 2011

Java:

Вы можете использовать: метод String.contains ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...