5

我需要确定文本框中的字符总数并在标签中显示值,但需要排除所有空格。

这是代码:

var     
sLength : string;
i : integer;
begin
     sLength := edtTheText.Text;
     slength:= ' ';
     i := length(sLength);

     //display the length of the string
     lblLength.Caption := 'The string is ' +  IntToStr(i)  + ' characters long';
4

2 回答 2

11

您可以像这样计算非空白字符:

uses
  Character;

function NonWhiteSpaceCharacterCount(const str: string): Integer;
var
  c: Char;
begin
  Result := 0;
  for c in str do
    if not Character.IsWhiteSpace(c) then
      inc(Result);
end;

这用于Character.IsWhiteSpace确定字符是否为空格。根据 Unicode 规范,当且仅当字符被归类为空格时才IsWhiteSpace返回。True因此,制表符算作空格。

于 2012-09-17T15:46:17.353 回答
0

如果您使用的是 Ansi 版本的 Delphi,您还可以使用查找表,例如

NotBlanks: Array[0..255] Of Boolean

如果匹配字符不是空白,则设置数组中的 Bool。然后在循环中你只需增加你的计数器

Count := 0;
For i := 1 To Length(MyStringToParse) Do
  Inc(Count, Byte(NotBlanks[ Ord(MyStringToParse[i]])) );

以同样的方式,您可以使用一组:

For i := 1 To Length(MyStringToParse) Do
If Not (MyStringToParse[i] In [#1,#2{define the blanks in this enum}]) Then 
  Inc(Count).

其实你有很多方法可以解决这个问题。

于 2012-09-17T20:39:58.033 回答