将String设为仅1行

时间:2011-07-12 17:58:06

标签: string delphi

我的输出基本上是一个段落,当我尝试在字符串中搜索子字符串时,如果该子字符串被拆分,它就不起作用。如何将段落字符串分成1行?

示例字符串:

I have an output that is basically a paragraph and when I try 
to search the string for a substring, if that substring is split up it 
doesn't work. How can I make the paragraph string into just 1 line?

substring:“它不起作用”

当我尝试搜索该子字符串时,它不会返回true。

3 个答案:

答案 0 :(得分:16)

您似乎希望将换行视为空格。编写高效的搜索算法并非易事,但工作并回答标题中的问题的方法是

str := StringReplace(str, sLineBreak, ' ', [rfReplaceAll]);

也就是说,我们只需用空格替换所有换行符。没有魔术常数,这就是

str := StringReplace(str, #13#10, #32, [rfReplaceAll]);

除了换行符之外,这两个词之间可能还有空格?然后只需删除换行符,而不添加空格:

str := StringReplace(str, #13#10, '', [rfReplaceAll]);

答案 1 :(得分:3)

您可以尝试此功能:

function NoLineFeed(const s: string): string;
var i: integer;
begin
  result := s;
  for i := 1 to length(result) do
    if ord(result[i])<32 then
      result[i] := ' ';
end;

它会将任何控制字符(#10,#13,#9 ......)更改为空格,因此文本将位于同一行。它也比调用StringReplace()更快。

编辑:

function NoLineFeed(const s: string): string;
var i: integer;
begin
  result := s;
  for i := length(result) downto 1 do
    if ord(result[i])<32 then
      if (i>1) and (ord(result[i-1])<=32) then
        delete(result,i,1) else
        result[i] := ' ';
end;

这样它就会将#13#10变成一个''。

答案 2 :(得分:1)

尝试这样的事情:

S := 'paragraph here';
S := AdjustLineBreaks(S, tlbsLF);
S := StringReplace(S, #10, ' ', [rfReplaceAll]);
I := Pos('search string here', S);