Изменение регистра в .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".