2009-02-09 2 views
3

в .NET есть функция, которая возвращает корневой письмо (письмо без специальных атрибутов, таких как седилем), своего рода:Есть функция, которая возвращает корневую букву для специальных символов?

Select Case c 
    Case "á", "à", "ã", "â", "ä", "ª" : x = "a" 
    Case "é", "è", "ê", "ë" : x = "e" 
    Case "í", "ì", "î", "ï" : x = "i" 
    Case "ó", "ò", "õ", "ô", "ö", "º" : x = "o" 
    Case "ú", "ù", "û", "ü" : x = "u" 

    Case "Á", "À", "Ã", "Â", "Ä" : x = "A" 
    Case "É", "È", "Ê", "Ë" : x = "E" 
    Case "Í", "Ì", "Î", "Ï" : x = "I" 
    Case "Ó", "Ò", "Õ", "Ô", "Ö" : x = "O" 
    Case "Ú", "Ù", "Û", "Ü" : x = "U" 

    Case "ç" : x = "c" 
    Case "Ç" : x = "C" 

    Case Else 
     x = c 
End Select 

Этот код пропустить некоторые буквы, но это только для примера сакэ :)

ответ

2

Кстати (совершенно не связаны с вопросом), ваш код работает со строками. Это не только менее эффективно, но и на самом деле не имеет смысла, поскольку вы заинтересованы в отдельных символах, а не в строках, и это разные типы данных в .NET.

Чтобы получить один-литеру, а не строковый литерал, добавьте c к вашему буквальным:

Select Case c 
    Case "á"c, "à"c, "ã"c, "â"c, "ä"c, "ª"c : x = "a"c 
    ' … and so on. ' 
End Select 
1

взяты из ответа Четан Шастри, здесь я даю вам код VB.NET и C# один скопированный от его большого ответа :)

VB:

Imports System.Text 
Imports System.Globalization 

''' <summary> 
''' Removes the special attributes of the letters passed in the word 
''' </summary> 
''' <param name="word">Word to be normalized</param> 
Function RemoveDiacritics(ByRef word As String) As String 
    Dim normalizedString As String = word.Normalize(NormalizationForm.FormD) 
    Dim r As StringBuilder = New StringBuilder() 
    Dim i As Integer 
    Dim c As Char 

    For i = 0 To i < normalizedString.Length 
     c = normalizedString(i) 
     If (CharUnicodeInfo.GetUnicodeCategory(c) <> UnicodeCategory.NonSpacingMark) Then 
      r.Append(c) 
     End If 
    Next 

    RemoveDiacritics = r.ToString 
End Function 

C#

using System.Text; 
using System.Globalization; 

/// <summary> 
/// Removes the special attributes of the letters passed in the word 
/// </summary> 
/// <param name="word">Word to be normalized</param> 
public String RemoveDiacritics(String word) 
{ 
    String normalizedString = word.Normalize(NormalizationForm.FormD); 
    StringBuilder stringBuilder = new StringBuilder(); 
    int i; 
    Char c; 

    for (i = 0; i < normalizedString.Length; i++) 
    { 
    c = normalizedString[i]; 
    if (CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark) 
    stringBuilder.Append(c); 
    } 

    return stringBuilder.ToString(); 
} 

Я надеюсь, что это помогает кто-то вроде меня :)

0

Существует также простой способ сравнить строки в .NET

public static string NormalizeString(string value) 
{ 
    string nameFormatted = value.Normalize(System.Text.NormalizationForm.FormKD); 
    Regex reg = new Regex("[^a-zA-Z0-9 ]"); 
    return reg.Replace(nameFormatted, ""); 
} 
Смежные вопросы