我的输出基本上是一个段落,当我尝试在字符串中搜索子字符串时,如果该子字符串被拆分,它就不起作用。如何将段落字符串分成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。
答案 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);