如何获取字符串中的第一个元素?

Iva*_*nov 16 delphi string

我正在试图找出一种方法来检查字符串的第一个元素,如果它是一个数字或不是.

if not(myString[0] in [0..9]) then //Do something
Run Code Online (Sandbox Code Playgroud)

问题是我收到错误"元素0无法访问 - 使用'长度'或'SetLength"

另一种方式来自我的C-like exprieince - 将字符串的第一个元素转换为char并检查char,但编译错误没有区别.

if not(char(myString[0]) in [0..9]) then //Do something
Run Code Online (Sandbox Code Playgroud)

我该如何完成它?

Ond*_*lle 40

字符串是基于1的:

if not (myString[1] in ['0'..'9']) then // Do something
Run Code Online (Sandbox Code Playgroud)

  • 在现代版本的Delphi中,字符串是基于1的,仅适用于Windows平台,对于移动平台,字符串是基于0的.这意味着建议的代码仅与Windows平台兼容. (5认同)
  • 再看看TOndrej的代码:'0'周围应该有单引号.'9' (4认同)
  • 47秒......该死的......;) (3认同)
  • 约翰,然后使用TryStrToInt. (2认同)

smo*_*ok1 16

Pascal和Delphi从1开始索引字符串.这是从零字节包含长度的时间开始的遗留,而下一个255(索引1到255)包含实际字符.Joel Spolsky写了很多关于字符串问题的文章:http:
//www.joelonsoftware.com/articles/fog0000000319.html


Oli*_*sen 8

Delphi字符串使用基于1的索引,因此只需重写即可

if not(myString[1] in ['0'..'9']) then //Do something
Run Code Online (Sandbox Code Playgroud)

还要注意周围的引号0..9,否则你会将字符与整数进行比较.


And*_*tyn 5

我们应该记住一些事情:

  1. Delphi中的字符串对于移动平台是基于0的,对于Windows是基于1的.
  2. 旧版Delphi中的字符串是AnsiString(每个字符1个字节)和WideString新版本(每个字符2个字节).
  3. Delphi支持set AnsiChar,但不支持set WideChar.

因此,如果我们想要编写与所有版本的Delphi兼容的代码,那么它应该是这样的:

if (myString[Low(myString)]>='0') and (myString[Low(myString)]<='9') then
  // Do something
Run Code Online (Sandbox Code Playgroud)