我正在试图找出一种方法来检查字符串的第一个元素,如果它是一个数字或不是。
if not(myString[0] in [0..9]) then //Do something
问题是我收到错误“元素0无法访问 - 使用'长度'或'SetLength”
另一种方式来自我的C-like exprieince - 将字符串的第一个元素转换为char并检查char,但编译错误没有区别。
if not(char(myString[0]) in [0..9]) then //Do something
我如何完成它?
答案 0 :(得分:38)
字符串是从1开始的:
if not (myString[1] in ['0'..'9']) then // Do something
答案 1 :(得分:15)
Pascal和Delphi从1开始索引字符串。这是从零字节包含长度的时间遗留下来的,而下一个255(索引1到255)包含实际字符。
Joel Spolsky写了很多关于字符串问题的文章:
http://www.joelonsoftware.com/articles/fog0000000319.html
答案 2 :(得分:8)
Delphi字符串使用基于1的索引,因此只需重写
if not(myString[1] in ['0'..'9']) then //Do something
还要注意0..9
周围的引号,否则你会将字符与整数进行比较。
答案 3 :(得分:5)
我们应该记住一些事情:
AnsiString
(每个字符1个字节)和新版本中的WideString
(每个字符2个字节)。 AnsiChar
集,但不支持WideChar
集。因此,如果我们想编写一个与所有版本的Delphi兼容的代码,那么它应该是这样的:
if (myString[Low(myString)]>='0') and (myString[Low(myString)]<='9') then
// Do something
答案 4 :(得分:1)
如果不是([0..9]中的myString [0])则//执行某些操作
如果你正在使用Delphi 2009,Character.pas中的TCharacter类具有像IsDigit这样的函数来帮助简化这些操作。
当然,修复索引后。 :)
答案 5 :(得分:1)
随后对Delphi移动代码进行更新,底部字符串索引从0更改为1.编译旧程序时,使用0起始索引编译并正确运行。使用更高版本的IDE创建的程序会产生错误。当你有混合物时,生活变得复杂!
能够接受一个较旧的程序并告诉IDE你想要它更新是很好的(也许这会解决其他问题,比如当你接听电话时字体变得混乱!)但它会善于把事情保持一致!
答案 6 :(得分:0)
检查字符串的第一个字符是否为整数,然后调度的最简单方法:
var
iResult : integer;
begin
if TryStrToInt( mySTring[1], iResult) then
begin
// handle number logic here iResult = number
end
else
begin
// handle non number logic here
end;
end;
答案 7 :(得分:0)
我使用实用程序函数来测试整个字符串:
function IsNumeric(const Value: string): Boolean;
var
i: Integer;
begin
Result := True;
for i := 1 to Length(Value) do
if not (Value[i] in ['0'..'9','.','+','-']) then
begin
Result := False;
Break;
end;
end;
以上代码适用于2007年之前的Delphi版本。在2007年和2009年,您可以将整数变量i更改为字符c,并在值中使用c代替。
要仅测试整数,请删除“。”从要测试的字符集开始。
答案 8 :(得分:0)
这是不正确的。 ISO字符串和旧的Pascal也从一开始。这只是一个普遍的惯例,并且af [0]的结果是空置的结果,并且在UCSD字节码解释器中代码便宜。但最后一点是在我的时间之前,所以只有我的猜测。
它来自Pascal具有任意上限和下限的能力,这提供了更多类型安全访问数组。
真正古老的Pascal字符串(直到八十年代初)字符串甚至比C字符串还差。使用了多个约定,但所有约定都基于静态数组(如早期C),但它们通常是空间填充的,因此您从末尾扫描回到空格结束。
(删除旧版标记,因为基于1是遗留的。访问s [0]作为遗留长度的遗留问题,但这不是问题所在。)
答案 9 :(得分:0)
Foreach element in strName
if not element in [0-9] then
do something
else
element is a digit
end if
不要忘记数字编号之间的引用。