字符串连接VS字符串格式

Ill*_*lov 13 delphi

什么是最好的方法,简单的字符串连接或string.format

例如,使用什么更好:

 s:=v1+' '+v2 
Run Code Online (Sandbox Code Playgroud)

要么

s:=format('%S %S',[v1,v2])
Run Code Online (Sandbox Code Playgroud)

Mas*_*ler 11

取决于您的"最佳"标准.如果你所做的只是连接两个字符串,我会选择+运算符.很明显你正在尝试做什么并且易于阅读,并且它更快一点,因为它不必使用变体.(你看过format引擎盖下究竟做了什么吗?这有点吓人!)

它的主要优点format是它允许您创建单个字符串并将其存储在某个位置,例如在文本文件或资源字符串中,并在以后收集其他参数.这使它对更复杂的任务很有用.但是,如果您只需要将两根琴弦粘在一起,那就有点过分了IMO.

  • 通常最好的"最好的"归结为"我明白为什么我从现在开始3个月就这样写代码了吗?". (6认同)

Cra*_*ntz 10

格式与国际化一起使用,可以本地化您的应用程序.连接没有.因此,我赞成任何可能必须以文化依赖方式制作的展示格式.

更新:原因格式适用于国际化,并非所有语言都以相同的顺序表达所有内容.一个人为的例子是:

resourcestring
    sentence = ' is ';

var
    subject = 'Craig';
    adjective = 'helpful';
begin
   WriteLn(subject + sentence + adjective + '!');
Run Code Online (Sandbox Code Playgroud)

这是有效的,我可以使用资源字符串进行自定义,但在西班牙语中我会写,"éQuéserviciales Craig!" resourcestring对我没有帮助.相反,我应该写:

resourcestring
    sentence = '%S is %S!'; // ES: '¡Qué %1:S es %0:S!'
Run Code Online (Sandbox Code Playgroud)

  • 您可能想解释该声明,对于很多 Delphi 用户来说,为什么 Format 与 i18n 一起工作可能并不明显。 (2认同)

RRU*_*RUZ 5

这是第三种选择:

s:=Concat(V1,V2);
Run Code Online (Sandbox Code Playgroud)

  • 这与s:= V1 + V2相同; Concat是一个编译器"魔术"函数,它被折叠以调用与<str> + <str>相同的内部帮助器. (6认同)
  • 虽然它在幕后是相同的,但我发现在代码中比"+"运算符更容易阅读,特别是对于长字符串或多个连接.这可以追溯到梅森的"最佳"实用点. (2认同)