문자열을 제목 대소문자로 변환
대소문자를 혼합한 문자열이 있습니다.
예를 들어 다음과 같습니다.string myData = "a Simple string";
각 단어의 첫 글자(공백으로 구분)를 대문자로 변환해야 합니다.그래서 나는 다음과 같이 결과를 원한다.string myData ="A Simple String";
쉬운 방법이 없을까요?문자열을 분할하여 변환하고 싶지 않습니다(그것이 마지막 수단이 됩니다).또, 현악기는 반드시 영어로 되어 있습니다.
MSDN : TextInfo.ToTitle 케이스
다음을 포함해야 합니다.using System.Globalization
string title = "war and peace";
TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;
title = textInfo.ToTitleCase(title);
Console.WriteLine(title) ; //War And Peace
//When text is ALL UPPERCASE...
title = "WAR AND PEACE" ;
title = textInfo.ToTitleCase(title);
Console.WriteLine(title) ; //WAR AND PEACE
//You need to call ToLower to make it work
title = textInfo.ToTitleCase(title.ToLower());
Console.WriteLine(title) ; //War And Peace
이것을 시험해 보세요.
string myText = "a Simple string";
string asTitleCase =
System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.
ToTitleCase(myText.ToLower());
이미 지적된 바와 같이 TextInfo를 사용합니다.ToTitleCase는 원하는 결과를 제공하지 않을 수 있습니다.출력을 보다 제어할 필요가 있는 경우는, 다음과 같이 할 수 있습니다.
IEnumerable<char> CharsToTitleCase(string s)
{
bool newWord = true;
foreach(char c in s)
{
if(newWord) { yield return Char.ToUpper(c); newWord = false; }
else yield return Char.ToLower(c);
if(c==' ') newWord = true;
}
}
그런 다음 다음과 같이 사용합니다.
var asTitleCase = new string( CharsToTitleCase(myText).ToArray() );
또 다른 변형입니다.여기에 있는 몇 가지 힌트를 바탕으로 내 목적에 적합한 확장 방법으로 축소했습니다.
public static string ToTitleCase(this string s) =>
CultureInfo.InvariantCulture.TextInfo.ToTitleCase(s.ToLower());
저는 개인적으로TextInfo.ToTitleCase
방법인데 왜 모든 문자가 대문자로 되어 있는데 작동하지 않는지 이해가 안 돼요.
Winston Smith가 제공하는 util 함수는 마음에 들지만, 현재 사용하고 있는 함수는 다음과 같습니다.
public static String TitleCaseString(String s)
{
if (s == null) return s;
String[] words = s.Split(' ');
for (int i = 0; i < words.Length; i++)
{
if (words[i].Length == 0) continue;
Char firstChar = Char.ToUpper(words[i][0]);
String rest = "";
if (words[i].Length > 1)
{
rest = words[i].Substring(1).ToLower();
}
words[i] = firstChar + rest;
}
return String.Join(" ", words);
}
몇 가지 테스트 문자열을 사용하여 재생:
String ts1 = "Converting string to title case in C#";
String ts2 = "C";
String ts3 = "";
String ts4 = " ";
String ts5 = null;
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts1)));
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts2)));
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts3)));
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts4)));
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts5)));
출력:
|Converting String To Title Case In C#|
|C|
||
| |
||
최근에 나는 더 나은 해결책을 찾았다.
텍스트에 대문자로 된 모든 문자가 포함된 경우 TextInfo는 해당 문자를 적절한 대/소문자로 변환하지 않습니다.다음과 같은 소문자 함수를 사용하여 수정할 수 있습니다.
public static string ConvertTo_ProperCase(string text)
{
TextInfo myTI = new CultureInfo("en-US", false).TextInfo;
return myTI.ToTitleCase(text.ToLower());
}
이제 Propercase로 들어오는 모든 항목이 변환됩니다.
public static string PropCase(string strText)
{
return new CultureInfo("en").TextInfo.ToTitleCase(strText.ToLower());
}
사용하다ToLower()
먼저, 그 다음에CultureInfo.CurrentCulture.TextInfo.ToTitleCase
올바른 출력을 얻을 수 있습니다.
//---------------------------------------------------------------
// Get title case of a string (every word with leading upper case,
// the rest is lower case)
// i.e: ABCD EFG -> Abcd Efg,
// john doe -> John Doe,
// miXEd CaSING - > Mixed Casing
//---------------------------------------------------------------
public static string ToTitleCase(string str)
{
return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str.ToLower());
}
Compact Framework 솔루션에 관심이 있는 경우:
return String.Join(" ", thestring.Split(' ').Select(i => i.Substring(0, 1).ToUpper() + i.Substring(1).ToLower()).ToArray());
여기 그 문제에 대한 해결책이 있습니다.
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
TextInfo textInfo = cultureInfo.TextInfo;
string txt = textInfo.ToTitleCase(txt);
모든 캡스 워드에 대응하는 방법이 필요했고, Ricky AH의 솔루션이 마음에 들었지만, 한 걸음 더 나아가 확장 방법으로 구현했습니다.이렇게 하면 문자 배열을 작성한 후 매번 ToArray를 명시적으로 호출해야 하는 단계를 피할 수 있습니다.따라서 다음과 같이 문자열을 호출하기만 하면 됩니다.
사용방법:
string newString = oldString.ToProper();
코드:
public static class StringExtensions
{
public static string ToProper(this string s)
{
return new string(s.CharsToTitleCase().ToArray());
}
public static IEnumerable<char> CharsToTitleCase(this string s)
{
bool newWord = true;
foreach (char c in s)
{
if (newWord) { yield return Char.ToUpper(c); newWord = false; }
else yield return Char.ToLower(c);
if (c == ' ') newWord = true;
}
}
}
위의 참고 자료를 사용했는데, 완전한 솔루션은 다음과 같습니다.
Use Namespace System.Globalization;
string str = "INFOA2Z means all information";
// "Infoa2z는 모든 정보를 의미합니다"와 같은 결과 필요
// 문자열도 소문자로 변환해야 합니다.그렇지 않으면 올바르게 동작하지 않습니다.
TextInfo ProperCase = new CultureInfo("en-US", false).TextInfo;
str = ProperCase.ToTitleCase(str.toLower());
ASP에서 문자열을 적절한 대소문자로 변경합니다.C#을 사용한NET
자신의 코드를 시도해 보는 것이 더 잘 이해할 수 있다.
더 읽기
http://www.stupidcodes.com/2014/04/convert-string-to-uppercase-proper-case.html
1) 문자열을 대문자로 변환
string lower = "converted from lowercase";
Console.WriteLine(lower.ToUpper());
2) 문자열을 소문자로 변환하다
string upper = "CONVERTED FROM UPPERCASE";
Console.WriteLine(upper.ToLower());
3) 문자열을 Title Case로 변환
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
TextInfo textInfo = cultureInfo.TextInfo;
string txt = textInfo.ToTitleCase(TextBox1.Text());
String TitleCaseString(String s)
{
if (s == null || s.Length == 0) return s;
string[] splits = s.Split(' ');
for (int i = 0; i < splits.Length; i++)
{
switch (splits[i].Length)
{
case 1:
break;
default:
splits[i] = Char.ToUpper(splits[i][0]) + splits[i].Substring(1);
break;
}
}
return String.Join(" ", splits);
}
「 」를 사용하지 TextInfo
:
public static string TitleCase(this string text, char seperator = ' ') =>
string.Join(seperator, text.Split(seperator).Select(word => new string(
word.Select((letter, i) => i == 0 ? char.ToUpper(letter) : char.ToLower(letter)).ToArray())));
각 워드의 모든 문자를 루프하여 첫 글자인 경우 대문자로 변환합니다. 그렇지 않으면 소문자로 변환됩니다.
이 간단한 방법을 사용하여 텍스트 또는 문자열을 null 또는 빈 문자열 값을 확인한 후 직접 적절한 문자열로 변경하여 오류를 제거할 수 있습니다.
// Text to proper (Title Case):
public string TextToProper(string text)
{
string ProperText = string.Empty;
if (!string.IsNullOrEmpty(text))
{
ProperText = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(text);
}
else
{
ProperText = string.Empty;
}
return ProperText;
}
(대문자 문자열도 취급):
string properCase = Strings.StrConv(str, VbStrConv.ProperCase);
다음은 캐릭터별로 구현한 것입니다.(One Two Three)와 연동해야 합니다.
public static string ToInitcap(this string str)
{
if (string.IsNullOrEmpty(str))
return str;
char[] charArray = new char[str.Length];
bool newWord = true;
for (int i = 0; i < str.Length; ++i)
{
Char currentChar = str[i];
if (Char.IsLetter(currentChar))
{
if (newWord)
{
newWord = false;
currentChar = Char.ToUpper(currentChar);
}
else
{
currentChar = Char.ToLower(currentChar);
}
}
else if (Char.IsWhiteSpace(currentChar))
{
newWord = true;
}
charArray[i] = currentChar;
}
return new string(charArray);
}
이것을 시험해 보세요.
using System.Globalization;
using System.Threading;
public void ToTitleCase(TextBox TextBoxName)
{
int TextLength = TextBoxName.Text.Length;
if (TextLength == 1)
{
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
TextInfo textInfo = cultureInfo.TextInfo;
TextBoxName.Text = textInfo.ToTitleCase(TextBoxName.Text);
TextBoxName.SelectionStart = 1;
}
else if (TextLength > 1 && TextBoxName.SelectionStart < TextLength)
{
int x = TextBoxName.SelectionStart;
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
TextInfo textInfo = cultureInfo.TextInfo;
TextBoxName.Text = textInfo.ToTitleCase(TextBoxName.Text);
TextBoxName.SelectionStart = x;
}
else if (TextLength > 1 && TextBoxName.SelectionStart >= TextLength)
{
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
TextInfo textInfo = cultureInfo.TextInfo;
TextBoxName.Text = textInfo.ToTitleCase(TextBoxName.Text);
TextBoxName.SelectionStart = TextLength;
}
}
TextBox ch TextChanged 。
사용자가 Shift 또는 Caps Lock을 눌러 덮어쓰기로 결정하지 않는 한 대부분의 경우 이 기능이 작동합니다.Android나 iOS 키보드처럼요.
Private Class ProperCaseHandler
Private Const wordbreak As String = " ,.1234567890;/\-()#$%^&*€!~+=@"
Private txtProperCase As TextBox
Sub New(txt As TextBox)
txtProperCase = txt
AddHandler txt.KeyPress, AddressOf txtTextKeyDownProperCase
End Sub
Private Sub txtTextKeyDownProperCase(ByVal sender As System.Object, ByVal e As Windows.Forms.KeyPressEventArgs)
Try
If Control.IsKeyLocked(Keys.CapsLock) Or Control.ModifierKeys = Keys.Shift Then
Exit Sub
Else
If txtProperCase.TextLength = 0 Then
e.KeyChar = e.KeyChar.ToString.ToUpper()
e.Handled = False
Else
Dim lastChar As String = txtProperCase.Text.Substring(txtProperCase.SelectionStart - 1, 1)
If wordbreak.Contains(lastChar) = True Then
e.KeyChar = e.KeyChar.ToString.ToUpper()
e.Handled = False
End If
End If
End If
Catch ex As Exception
Exit Sub
End Try
End Sub
End Class
확장 방법으로서:
/// <summary>
// Returns a copy of this string converted to `Title Case`.
/// </summary>
/// <param name="value">The string to convert.</param>
/// <returns>The `Title Case` equivalent of the current string.</returns>
public static string ToTitleCase(this string value)
{
string result = string.Empty;
for (int i = 0; i < value.Length; i++)
{
char p = i == 0 ? char.MinValue : value[i - 1];
char c = value[i];
result += char.IsLetter(c) && ((p is ' ') || p is char.MinValue) ? $"{char.ToUpper(c)}" : $"{char.ToLower(c)}";
}
return result;
}
사용방법:
"kebab is DELICIOU's ;d c...".ToTitleCase();
결과:
Kebab Is Deliciou's ;d C...
낙타 케이스에서도 잘 작동한다: '일부'페이지 내의 텍스트'
public static class StringExtensions
{
/// <summary>
/// Title case example: 'Some Text In Your Page'.
/// </summary>
/// <param name="text">Support camel and title cases combinations: 'someText in YourPage'</param>
public static string ToTitleCase(this string text)
{
if (string.IsNullOrEmpty(text))
{
return text;
}
var result = string.Empty;
var splitedBySpace = text.Split(new[]{ ' ' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var sequence in splitedBySpace)
{
// let's check the letters. Sequence can contain even 2 words in camel case
for (var i = 0; i < sequence.Length; i++)
{
var letter = sequence[i].ToString();
// if the letter is Big or it was spaced so this is a start of another word
if (letter == letter.ToUpper() || i == 0)
{
// add a space between words
result += ' ';
}
result += i == 0 ? letter.ToUpper() : letter;
}
}
return result.Trim();
}
}
키 누르기를 자동으로 하고 싶은 분들을 위해 VB에서 다음 코드로 했습니다.커스텀 텍스트 박스 컨트롤의 NET - 일반 텍스트 박스에서도 할 수 있지만, OOP의 개념에 맞는 커스텀 컨트롤을 통해 특정 컨트롤의 반복 코드를 추가할 수 있습니다.
Imports System.Windows.Forms
Imports System.Drawing
Imports System.ComponentModel
Public Class MyTextBox
Inherits System.Windows.Forms.TextBox
Private LastKeyIsNotAlpha As Boolean = True
Protected Overrides Sub OnKeyPress(e As KeyPressEventArgs)
If _ProperCasing Then
Dim c As Char = e.KeyChar
If Char.IsLetter(c) Then
If LastKeyIsNotAlpha Then
e.KeyChar = Char.ToUpper(c)
LastKeyIsNotAlpha = False
End If
Else
LastKeyIsNotAlpha = True
End If
End If
MyBase.OnKeyPress(e)
End Sub
Private _ProperCasing As Boolean = False
<Category("Behavior"), Description("When Enabled ensures for automatic proper casing of string"), Browsable(True)>
Public Property ProperCasing As Boolean
Get
Return _ProperCasing
End Get
Set(value As Boolean)
_ProperCasing = value
End Set
End Property
End Class
C에서 실행하는 방법:
char proper(char string[])
{
int i = 0;
for(i=0; i<=25; i++)
{
string[i] = tolower(string[i]); // Converts all characters to lower case
if(string[i-1] == ' ') // If the character before is a space
{
string[i] = toupper(string[i]); // Converts characters after spaces to upper case
}
}
string[0] = toupper(string[0]); // Converts the first character to upper case
return 0;
}
언급URL : https://stackoverflow.com/questions/1206019/converting-string-to-title-case
'programing' 카테고리의 다른 글
두 Excel 워크시트의 차이점을 찾으십니까? (0) | 2023.04.22 |
---|---|
문자열(실제로는 문자)의 발생을 어떻게 카운트합니까? (0) | 2023.04.22 |
토글 버튼 그룹을 WPF의 라디오 버튼처럼 동작시키는 방법 (0) | 2023.04.22 |
EPPlus를 사용하여 INT를 반환하는 Excel 날짜 열 (0) | 2023.04.22 |
IIS 인스턴스에 디버거 연결 (0) | 2023.04.22 |