Поделиться через


Изменение регистра в .NET

При написании приложения, которое принимает вводимые пользователем данные, невозможно предугадать, какой регистр (верхний или нижний) будет при этом использоваться. Часто требуется обеспечить согласованность регистра строк, особенно если они отображаются в пользовательском интерфейсе. В таблице ниже описаны три метода изменения регистра. Для первых двух методов имеются перегруженные варианты, учитывающие язык и региональные параметры.

Имя метода Использование
String.ToUpper Преобразует все символы в строке в верхний регистр.
String.ToLower Преобразует все символы в строке в нижний регистр.
TextInfo.ToTitleCase Преобразует первые символы всех слов в строке в заглавные.

Предупреждение

String.ToLower Методы String.ToUpper не должны использоваться для преобразования строк, чтобы сравнить их или проверить их на равенство. Дополнительные сведения см. в разделе "Сравнение строк смешанного регистра ".

Сравнение строк, содержащих символы в разных регистрах

Чтобы сравнить строки, содержащие символы в разных регистрах, для их упорядочения, вызовите одну из перегрузок метода String.CompareTo с параметром comparisonType и укажите значение StringComparison.CurrentCultureIgnoreCase, StringComparison.InvariantCultureIgnoreCase или StringComparison.OrdinalIgnoreCase для аргумента comparisonType. Для сравнения с использованием определенного языка, отличного от текущего языка и региональных параметров, вызовите перегрузку метода String.CompareTo с параметрами culture и options и укажите значение CompareOptions.IgnoreCase для аргумента options.

Чтобы сравнить строки смешанного регистра, чтобы определить, равны ли они, вызовите одну из перегрузок метода с comparisonType параметром и укажите значение либо StringComparison.CurrentCultureIgnoreCase, StringComparison.InvariantCultureIgnoreCaseлибо StringComparison.OrdinalIgnoreCase для аргументаcomparisonType.String.Equals

Дополнительные сведения см. в рекомендациях по использованию строк.

ToUpperМетод

Метод String.ToUpper преобразует все символы в строке в верхний регистр. В следующем примере строка "Hello World!" преобразуется из смешанного регистра в верхний регистр.

string properString = "Hello World!";
Console.WriteLine(properString.ToUpper());
// This example displays the following output:
//       HELLO WORLD!
Dim MyString As String = "Hello World!"
Console.WriteLine(MyString.ToUpper())
' This example displays the following output:
'       HELLO WORLD!

В предыдущем примере по умолчанию учитываются язык и региональные параметры. В нем применяются соглашения об использовании регистров, действующие для текущих языка и региональных параметров. Чтобы выполнить изменение регистра с учетом языка и региональных параметров или применить соглашения о регистре определенного языка и региональных параметров, используйте String.ToUpper(CultureInfo) перегрузку метода и укажите значение CultureInfo.InvariantCulture или System.Globalization.CultureInfo объект, представляющий указанный язык и региональные параметры для culture параметра. Пример, демонстрирующий использование ToUpper метода для выполнения изменения регистра без учета языка и региональных параметров, см. в разделе "Выполнение изменений регистра с учетом языка и региональных параметров".

ToLowerМетод

Метод String.ToLower аналогичен предыдущему методу, однако преобразует все символы в строке в нижний регистр. В следующем примере строка "Hello World!" преобразуется в нижний регистр.

string properString = "Hello World!";
Console.WriteLine(properString.ToLower());
// This example displays the following output:
//       hello world!
Dim MyString As String = "Hello World!"
Console.WriteLine(MyString.ToLower())
' This example displays the following output:
'       hello world!

В предыдущем примере по умолчанию учитываются язык и региональные параметры. В нем применяются соглашения об использовании регистров, действующие для текущих языка и региональных параметров. Чтобы выполнить изменение регистра с учетом языка и региональных параметров или применить соглашения о регистре определенного языка и региональных параметров, используйте String.ToLower(CultureInfo) перегрузку метода и укажите значение CultureInfo.InvariantCulture или System.Globalization.CultureInfo объект, представляющий указанный язык и региональные параметры для culture параметра. Пример, демонстрирующий использование ToLower(CultureInfo) метода для выполнения изменения регистра без учета языка и региональных параметров, см. в разделе "Выполнение изменений регистра с учетом языка и региональных параметров".

ToTitleCaseМетод

Метод TextInfo.ToTitleCase преобразует первый символ каждого слова в верхний регистр, а остальные символы — в нижний. Однако слова, состоящие только из прописных букв, считаются сокращениями и не преобразуются.

Метод TextInfo.ToTitleCase учитывает регистр, то есть он использует соглашения об использовании регистров, действующие для определенного языка и региональных параметров. Чтобы вызвать этот метод, сначала нужно получить объект TextInfo, представляющий соглашения об использовании регистров, из свойства CultureInfo.TextInfo конкретного языка и региональных параметров.

В примере ниже каждая строка из массива передается в метод TextInfo.ToTitleCase. Среди строк есть как строки заголовков, так и сокращения. Строки преобразуются в последовательности слов, начинающихся с заглавных букв, согласно соглашениям об использовании регистров для языка и региональных параметров "Английский (США)".

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] values = { "a tale of two cities", "gROWL to the rescue",
                          "inside the US government", "sports and MLB baseball",
                          "The Return of Sherlock Holmes", "UNICEF and children"};

      TextInfo ti = CultureInfo.CurrentCulture.TextInfo;
      foreach (var value in values)
         Console.WriteLine("{0} --> {1}", value, ti.ToTitleCase(value));
   }
}
// The example displays the following output:
//    a tale of two cities --> A Tale Of Two Cities
//    gROWL to the rescue --> Growl To The Rescue
//    inside the US government --> Inside The US Government
//    sports and MLB baseball --> Sports And MLB Baseball
//    The Return of Sherlock Holmes --> The Return Of Sherlock Holmes
//    UNICEF and children --> UNICEF And Children
Imports System.Globalization

Module Example
    Public Sub Main()
        Dim values() As String = {"a tale of two cities", "gROWL to the rescue",
                                   "inside the US government", "sports and MLB baseball",
                                   "The Return of Sherlock Holmes", "UNICEF and children"}

        Dim ti As TextInfo = CultureInfo.CurrentCulture.TextInfo
        For Each value In values
            Console.WriteLine("{0} --> {1}", value, ti.ToTitleCase(value))
        Next
    End Sub
End Module
' The example displays the following output:
'    a tale of two cities --> A Tale Of Two Cities
'    gROWL to the rescue --> Growl To The Rescue
'    inside the US government --> Inside The US Government
'    sports and MLB baseball --> Sports And MLB Baseball
'    The Return of Sherlock Holmes --> The Return Of Sherlock Holmes
'    UNICEF and children --> UNICEF And Children

Обратите внимание на то, что хотя метод TextInfo.ToTitleCase и учитывает язык и региональные параметры, он не обеспечивает лингвистическую правильность использования прописных и строчных букв. Например, в предыдущем примере метод преобразует строку "a tale of two cities" в "A Tale Of Two Cities". При этом лингвистически правильным для языка и региональных параметров en-US будет преобразование "A Tale of Two Cities".

См. также