用于检查字符串的语句

时间:2014-06-24 14:39:55

标签: delphi

所以我试图确定两个不同的字符串是否与

相同
 if DerobModel.ConstructionCount > 22 then
 begin
   for i := 22 to DerobModel.ConstructionCount-1 do
   begin
     ConstructionName[i] := DerobModel.Constructions[i].Name;
     ShowMessage(ConstructionName[i]);
     ShowMessage(DerobModel.HouseProperties.StringValue['NWall']);
     if ConstructionName[i]=DerobModel.HouseProperties.StringValue['NWall'] then
     begin
       ShowMessage('Hej');
       igSurf[0]:=idWallCon[i];
     end;
     LayerCount[i] := DerobModel.Constructions[i].LayerCount;
     idWallCon[i] := i+1;
   end;
 end;

两个字符串的ShowMessage返回相同的字符串但不知何故它不会进入if语句。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

已知字符串的=运算符可以正常工作。当字符串s1s2相等时,s1 = s2的计算结果为true。否则它会评估为false。已知=运算符可以在所有版本的Delphi中正常工作。

得出的结论是,如果你的if的主体没有执行,那么这两个字符串就不相等了。既然你知道这两个字符串不相等,你可以调试程序来解决为什么你认为相同的两件事实际上是不相等的。

请注意,使用=进行的等式测试是准确的。信件案件很重要。空白很重要。等等。

答案 1 :(得分:2)

你的字符串不同,很简单。
如果你想弄清楚究竟有什么不同,你可以写一个 else 块部分来详细比较字符串,并准确地显示出不同的内容。

if ConstructionName[i]=DerobModel.HouseProperties.StringValue['NWall'] then
begin
  ShowMessage('Hej');
  igSurf[0]:=idWallCon[i];
end
else
begin
  if (Length(ConstructionName[i]) <> 
      Length(DerobModel.HouseProperties.StringValue['NWall'])) then
  begin
    ShowMessage('Length('+IntToStr(Length(ConstructionName[i]))+') <> Length('+
                IntToStr(Length(DerobModel.HouseProperties.StringValue['NWall']))+')');
  end
  else
  begin
    for LCharPos := 1 to Length(ConstructionName[i]) do
    begin
      if (ConstructionName[i][LCharPos] <> 
          DerobModel.HouseProperties.StringValue['NWall'][LCharPos]) then
      begin
        //Here you might need to rather show the ordinal values of the 
        //characters to see the difference if they **look** the same due 
        //to the font of the message.
        ShowMessage('Pos['+IntToStr(LCharPos)+'] "'+
                    ConstructionName[i][LCharPos]+'" <> "'+
                    DerobModel.HouseProperties.StringValue['NWall'][LCharPos]+'"');
      end;
    end;
  end;
end;

我唯一可以想到的可能会出乎意料地导致“相同”字符串被报告为不同的是:如果它们是不同的字符串类型。例如。如果一个是WideString而另一个是AnsiString,那么:

  • 必须进行隐式转换才能进行比较。
  • 这意味着其中一个字符串会被更改。
  • 此更改可能会导致看起来的两个字符串实际上不同。