此代碼適用于 Delphi-7(直到 Delphi 支持 Unicode):
Value := edit1.Text[1];
if Value in ['м', 'ж'] then ...
'м', 'ж' - 西里爾符號
但是這種結構不適用于 Unicode 字符。
我嘗試了很多東西,但它們都不起作用。
我還嘗試將值型別更改為“Char”和“AnsiChar”。
不起作用:
const
MySet : set of WideChar = [WideChar('м'), WideChar('ж')];
begin
Value := edit1.Text[1];
if Value in MySet then ...
不起作用:
if AnsiChar(Value) in ['м', 'ж'] then ...
不起作用:
if CharInSet(Value, ['м', 'ж']) then ...
但這很好用:
if (Value = 'м') or (Value = 'ж') then ...
是否有機會在現代版本的 Delphi 中使用SET來檢查 UNICODE 字符?
還是我們應該單獨檢查每個字符?
我的Delphi版本是10.4 update 2 Community Edition
uj5u.com熱心網友回復:
Delphi 集合型別最多只能處理 256 個值,因此不能用于處理 Unicode 字符。為了處理 Unicode,該System.Character單元提供了各種方法和助手。
對于這種特殊情況,IsInArray()您可以使用一個字符助手。您需要宣告一個字符陣列,而不是宣告一組字符:
var
ch: Char;
a: array of Char;
s: string;
begin
a := ['м', 'ж'];
s := 'abcж';
for ch in s do
if ch.IsInArray(a) then ...
end;
注意:Delphi XE7 為初始化和使用動態陣列引入了額外的語言支持,方括號也可用于更簡單的陣列初始化。在上面示例的背景關系中,['м', 'ж']不是一個集合,而是一個寬字符陣列。
uj5u.com熱心網友回復:
檢查一個Unicode字符是否出現在一組字符中?
你的意思是德爾福集?
一般來說,不可能有一個set of X基型別X有超過 256 個可能的不同值的地方。所以set of Byte很好,但set of Word不可能。由于有 256 * 256 個不同的寬字符值,因此不可能有一組寬字符。(如果這確實可行,那么這種集合型別的變數大小將是 8 kB。這將是一個例外大的變數。)
由于沒有“Delphi Unicode 字符集”之類的東西,“如何查看一個字符是否屬于 Delphi Unicode 字符集”這個問題沒有意義。
或者你只是指一個數學集合?
如果是這樣,當然這是可能的,但是您不能使用 Delphi 集來表示數學字符集。相反,您需要使用其他一些資料型別。如果您不介意它的 O(n) 特性,一種可能性是簡單的陣列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/471637.html
上一篇:如何修改正在粘貼的文本?
下一篇:Delphi:從字串中洗掉字符
