gpt4 book ai didi

vb.net - 搜索特殊字符(例如accute等)的变体时比较字符串

转载 作者:行者123 更新时间:2023-12-01 15:20:02 25 4
gpt4 key购买 nike

我想知道.net中是否存在一种比较包含é等字母的字符串的方法。

示例:我正在搜索一个说José的字符串。当我检查字符串José是否包含“e”时(在无指责的情况下),我想返回true

有没有一种方法可以不手动比较不同字符的所有变体?

有任何想法吗?

最佳答案

您首先必须以某种方式定义变音符号。不要列出所有字符;而是使用Unicode类别。仅考虑两种或三种组合标记。

例如,您可能只想检测不影响基本字符宽度的组合标记(“非间距标记”)。或者,您可能会更加自由一些,甚至包含一些不能单独使用的标记,但是如果存在,它们仍会占用一些空间;像印度语脚本中的元音标记。所有三种组合标记将按以下方式检测:

Private Shared Function HasDiacritics(input As String) As Boolean
Dim uncombined As String = input.Normalize(NormalizationForm.FormD)

For i As Integer = 0 To uncombined.Length - 1
Dim uc As UnicodeCategory =
CharUnicodeInfo.GetUnicodeCategory(uncombined(i))

If uc = UnicodeCategory.NonSpacingMark
Or uc = UnicodeCategory.SpacingCombiningMark
Or uc = UnicodeCategory.EnclosingMark
Then
Return True
End If
Next

Return False
End Function

请注意转换为普通形式D。这会强制所有组成的字符(例如 é)分解为 e',然后再逐字符查看字符串。

现在等待,您询问相反的情况,您想检测字符串是否包含特定的基本字符。那更简单。
Private Shared Function HasChar(input As String, c as Char) As Boolean
Dim uncombined As String = input.Normalize(NormalizationForm.FormD)

For i As Integer = 0 To uncombined.Length - 1
If uncombined(i) = c Then Return True End If
Next

Return False
End Function

同样,您可以分别从每个字符串中去除特定类别的字符,然后仅比较剩余的字符。

关于vb.net - 搜索特殊字符(例如accute等)的变体时比较字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11615642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com