【问题标题】:How do I count characters in a string, excluding certain types?如何计算字符串中的字符,不包括某些类型?
【发布时间】:2012-09-09 20:39:18
【问题描述】:

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

代码如下:

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';

【问题讨论】:

  • 要删除所有空格吗?例如,制表符和空格?
  • 我想删除所有的空格。
  • 老实说,这个问题很简单。你试过了吗?
  • 正如信息:您发布的代码毫无意义。您将edtTheText.Text 的内容分配给sLength,然后在下一行分配一个空格(sLength:= ' ';)。第二个赋值将使 sLength 的长度始终为 1(除非您随后删除空格,在这种情况下它将始终为 0)。
  • 嗨 Glutz,我已经尝试过了,但现在才使用 Delphi 一个半星期,所以对它来说非常陌生。

标签: string delphi counting


【解决方案1】:

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

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 来确定字符是否为空格。 IsWhiteSpace 返回 True 当且仅当根据 Unicode 规范将字符分类为空格时。因此,制表符算作空格。

【讨论】:

    【解决方案2】:

    如果您使用的是 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-01-26
      • 1970-01-01
      • 2013-07-24
      • 2015-02-06
      • 2016-01-19
      • 1970-01-01
      • 2021-05-24
      • 2020-05-01
      • 1970-01-01
      相关资源
      最近更新 更多