如何用其他字符替换字符串中的字符?

How do I substitute characters in a string with other characters?

我正在使用 for do 循环和 StringReplace...我看到了问题,但我不知道如何解决它。 我想用保存在数组中的字符替换整个字符串,然后我想将完整的替换字符串保存到 sLine 中。问题是,每次 loop(L) 重复代码时,sLine 中先前替换的值都会被丢弃,以便它可以存储新的半替换字符串。 (所谓“半”,我的意思是它实际上一次只替换字符串中的 1 个字符。)

有没有办法先替换整个字符串,同时保留所有被替换的字符,然后将其保存在 sLine 中?

var
  sEncryptInput, sLine : string;
  K, L : integer;
begin
  redOutEncrypt.Clear;

  for K := 0 to redInEncrypt.Lines.Count do
    begin
      sEncryptInput := redInEncrypt.Lines[K];

      for L := 0 to 25 do
        begin
          sLine := StringReplace(UpperCase(sEncryptInput), UpperCase(arrPlainAlph[L]), arrOffset[L], [rfReplaceAll, rfIgnoreCase]);
        end;

      redOutEncrypt.Lines.Add(sLine);
    end;
end;

问题是循环的每次迭代都读取 sEncryptInput 作为其源,然后调用 StringReplace。由于 sEncryptInput 未在每次迭代中更新,因此您的 sLine 仅包含上次循环迭代中所做的更改。

为了保留每次迭代中所做的所有更改,您的循环需要从 读取并写入 同一个变量。所以你的代码应该是这样的:

      ...
      sEncryptInput := redInEncrypt.Lines[K];

      //Copy unmodified sEncryptInput to sLine before doing any changes in your loop
      sLine = sEncryptInput;

      for L := 0 to 25 do
        begin
          //Pass sLine as input sring to StringReplace in order to retain 
          //changes made in previous loop cycles
          sLine := StringReplace(UpperCase(sLine), UpperCase(arrPlainAlph[L]), arrOffset[L], [rfReplaceAll, rfIgnoreCase]);
        end;
      ...