如何将包含'='的字符串添加到stringlist中?

时间:2011-01-12 13:05:00

标签: c# java delphi

正则表达式用于解析包含“=”的文本,并将拆分字符串放入字符串列表中,如键值对。

但如果值包含'=',则不能使用list.add(key3 +'='+'number = 10');

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

怎么解决? 谢谢。

编辑:

谢谢大家的帮助。

如果我必须在密钥中添加包含'='的字符串,我该如何解决?

例如,要解析的文本可能是这样的:

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

我使用regex reg ='\ b \ S + \ b'解析文本并将maleconsumer = john放入stringlist的键中,以便在stringlist中,john的记录将是:

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

在这种情况下,我该怎么办?

再次感谢大家的帮助。

6 个答案:

答案 0 :(得分:6)

这在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允许= in key

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;

答案 1 :(得分:2)

检查值是否包含'=':

if(value.indexOf('=') != -1){
 //error prompt
}

答案 2 :(得分:1)

爪哇:

你可以使用:String.contains()方法。

答案 3 :(得分:1)

对于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"|';

查看here了解详细信息。

答案 4 :(得分:1)

的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;

答案 5 :(得分:1)

如果您使用的是Delphi 2009或更高版本,请使用TDictionary而不是TStringList。这样就可以避免让TStringList正常工作所需的所有这些黑客。