从Delphi中的字符串中删除多个子字符串

时间:2018-03-09 23:30:44

标签: delphi

我知道以下内容删除了Delphi中有问题的字符串('12345678')中位置3开头的四个字符:

    var
      Source : string;

    begin
      Source := '12345678';
      delete(Source, 3, 4);    // Delete the 3rd, 4th, 5th and 6th characters
      ShowMessage('Source now : '+Source);
    end;

但是如何删除多个子串呢?例如,如果我想删除2& 3以及5& 6在字符串'12345678'中以获得'1478'。感谢。

1 个答案:

答案 0 :(得分:2)

最简单(也可能是最有效)的方法就是两次调用Delete,首先删除从5开始的两个字符,然后从2开始删除两个字符。(如果你从首先,它改变了其余字符的索引,正如大卫在对问题的评论中指出的那样。

var
  Source : string;
begin
  Source := '12345678';
  Delete(Source, 5, 2);  
  Delete(Source, 2, 2); 
  ShowMessage('Source now : '+Source);
end;

@JanLaundsen在对该问题的评论中建议您也可以使用Copy在一行中执行此操作:

Source := Copy(Source, 1, 1) + Copy(Source, 4, 1) + Copy(Source, 7, MaxInt);

此解决方案有效,但增加了三个函数调用(对Copy的调用)加上三个临时字符串分配(每个调用Copy的结果一个)的开销,这些调用不会发生在这两行调用Delete。 (保存一行代码并不总是最好的解决方案)。国际海事组织,这两个单独的电话也更容易阅读,但这是个人意见。它可能对您不太可读。