C# Language
일반적인 문자열 연산
수색…
특정 문자로 문자열 분리하기
string helloWorld = "hello world, how is it going?";
string[] parts1 = helloWorld.Split(',');
//parts1: ["hello world", " how is it going?"]
string[] parts2 = helloWorld.Split(' ');
//parts2: ["hello", "world,", "how", "is", "it", "going?"]
주어진 문자열의 하위 문자열 얻기
string helloWorld = "Hello World!";
string world = helloWorld.Substring(6); //world = "World!"
string hello = helloWorld.Substring(0,5); // hello = "Hello"
Substring
은 지정된 인덱스에서 또는 두 인덱스 사이에서 Substring
반환합니다 (둘 다 포함).
문자열이 주어진 시퀀스로 시작하는지 확인하십시오.
string HelloWorld = "Hello World";
HelloWorld.StartsWith("Hello"); // true
HelloWorld.StartsWith("Foo"); // false
문자열 내에서 문자열 찾기
System.String.Contains
를 사용하면 문자열 내에 특정 문자열이 있는지 확인할 수 있습니다. 이 메소드는 부울을 반환하고 문자열이 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
string s = "Hello World";
bool stringExists = s.Contains("ello"); //stringExists =true as the string contains the substring
문자열 시작 및 / 또는 끝에서 원하지 않는 문자 자르기.
String.Trim()
string x = " Hello World! ";
string y = x.Trim(); // "Hello World!"
string q = "{(Hi!*";
string r = q.Trim( '(', '*', '{' ); // "Hi!"
String.TrimStart()
및 String.TrimEnd()
string q = "{(Hi*";
string r = q.TrimStart( '{' ); // "(Hi*"
string s = q.TrimEnd( '*' ); // "{(Hi"
문자열 서식 지정
String.Format()
메서드를 사용하여 문자열의 하나 이상의 항목을 지정된 객체의 문자열 표현으로 바꿉니다.
String.Format("Hello {0} Foo {1}", "World", "Bar") //Hello World Foo Bar
문자열 배열을 새 배열에 조인하기
var parts = new[] { "Foo", "Bar", "Fizz", "Buzz"};
var joined = string.Join(", ", parts);
//joined = "Foo, Bar, Fizz, Buzz"
문자열을 고정 길이로 채 웁니다.
string s = "Foo";
string paddedLeft = s.PadLeft(5); // paddedLeft = " Foo" (pads with spaces by default)
string paddedRight = s.PadRight(6, '+'); // paddedRight = "Foo+++"
string noPadded = s.PadLeft(2); // noPadded = "Foo" (original string is never shortened)
Array로부터 캐릭터 라인을 구축합니다.
String.Join
메서드는 문자열 / 문자 또는 문자열 목록에서 문자열을 구성하는 데 도움이 String.Join
. 이 메서드는 두 개의 매개 변수를받습니다. 첫 번째 요소는 배열의 각 요소를 구분하는 데 도움이되는 구분 기호 또는 구분 기호입니다. 두 번째 매개 변수는 Array 자체입니다.
char array
문자열 :
string delimiter=",";
char[] charArray = new[] { 'a', 'b', 'c' };
string inputString = String.Join(delimiter, charArray);
출력 : a,b,c
""
로 delimiter
를 변경하면 출력이 abc
됩니다.
List of char
에서 문자열 :
string delimiter = "|";
List<char> charList = new List<char>() { 'a', 'b', 'c' };
string inputString = String.Join(delimiter, charList);
출력 : a|b|c
문자열 List of Strings
:
string delimiter = " ";
List<string> stringList = new List<string>() { "Ram", "is", "a","boy" };
string inputString = String.Join(delimiter, stringList);
출력 : Ram is a boy
문자열 array of strings
:
string delimiter = "_";
string[] stringArray = new [] { "Ram", "is", "a","boy" };
string inputString = String.Join(delimiter, stringArray);
출력 : Ram_is_a_boy
ToString을 사용하여 서식 지정
일반적으로 우리는 형식을 지정하기 위해 String.Format
메서드를 사용하고, .ToString
은 다른 형식을 문자열로 변환하는 데 주로 사용됩니다. 변환이 진행되는 동안 ToString 메서드와 함께 형식을 지정할 수 있으므로 추가 서식을 피할 수 있습니다. 다른 유형으로 어떻게 작동하는지 설명해주십시오.
형식화 된 문자열에 대한 정수 :
int intValue = 10;
string zeroPaddedInteger = intValue.ToString("000"); // Output will be "010"
string customFormat = intValue.ToString("Input value is 0"); // output will be "Input value is 10"
두 번 형식화 된 문자열 :
double doubleValue = 10.456;
string roundedDouble = doubleValue.ToString("0.00"); // output 10.46
string integerPart = doubleValue.ToString("00"); // output 10
string customFormat = doubleValue.ToString("Input value is 0.0"); // Input value is 10.5
ToString을 사용하여 DateTime 서식 지정
DateTime currentDate = DateTime.Now; // {7/21/2016 7:23:15 PM}
string dateTimeString = currentDate.ToString("dd-MM-yyyy HH:mm:ss"); // "21-07-2016 19:23:15"
string dateOnlyString = currentDate.ToString("dd-MM-yyyy"); // "21-07-2016"
string dateWithMonthInWords = currentDate.ToString("dd-MMMM-yyyy HH:mm:ss"); // "21-July-2016 19:23:15"
문자열의 오른쪽에서 x 문자 가져 오기
Visual Basic에는 문자열의 왼쪽, 오른쪽 및 가운데에서 문자를 반환하는 Left, Right 및 Mid 함수가 있습니다. 이러한 메서드는 C #에는 없지만 Substring()
하여 구현할 수 있습니다. 다음과 같은 확장 메소드로 구현할 수 있습니다.
public static class StringExtensions
{
/// <summary>
/// VB Left function
/// </summary>
/// <param name="stringparam"></param>
/// <param name="numchars"></param>
/// <returns>Left-most numchars characters</returns>
public static string Left( this string stringparam, int numchars )
{
// Handle possible Null or numeric stringparam being passed
stringparam += string.Empty;
// Handle possible negative numchars being passed
numchars = Math.Abs( numchars );
// Validate numchars parameter
if (numchars > stringparam.Length)
numchars = stringparam.Length;
return stringparam.Substring( 0, numchars );
}
/// <summary>
/// VB Right function
/// </summary>
/// <param name="stringparam"></param>
/// <param name="numchars"></param>
/// <returns>Right-most numchars characters</returns>
public static string Right( this string stringparam, int numchars )
{
// Handle possible Null or numeric stringparam being passed
stringparam += string.Empty;
// Handle possible negative numchars being passed
numchars = Math.Abs( numchars );
// Validate numchars parameter
if (numchars > stringparam.Length)
numchars = stringparam.Length;
return stringparam.Substring( stringparam.Length - numchars );
}
/// <summary>
/// VB Mid function - to end of string
/// </summary>
/// <param name="stringparam"></param>
/// <param name="startIndex">VB-Style startindex, 1st char startindex = 1</param>
/// <returns>Balance of string beginning at startindex character</returns>
public static string Mid( this string stringparam, int startindex )
{
// Handle possible Null or numeric stringparam being passed
stringparam += string.Empty;
// Handle possible negative startindex being passed
startindex = Math.Abs( startindex );
// Validate numchars parameter
if (startindex > stringparam.Length)
startindex = stringparam.Length;
// C# strings are zero-based, convert passed startindex
return stringparam.Substring( startindex - 1 );
}
/// <summary>
/// VB Mid function - for number of characters
/// </summary>
/// <param name="stringparam"></param>
/// <param name="startIndex">VB-Style startindex, 1st char startindex = 1</param>
/// <param name="numchars">number of characters to return</param>
/// <returns>Balance of string beginning at startindex character</returns>
public static string Mid( this string stringparam, int startindex, int numchars)
{
// Handle possible Null or numeric stringparam being passed
stringparam += string.Empty;
// Handle possible negative startindex being passed
startindex = Math.Abs( startindex );
// Handle possible negative numchars being passed
numchars = Math.Abs( numchars );
// Validate numchars parameter
if (startindex > stringparam.Length)
startindex = stringparam.Length;
// C# strings are zero-based, convert passed startindex
return stringparam.Substring( startindex - 1, numchars );
}
}
이 확장 방법은 다음과 같이 사용할 수 있습니다.
string myLongString = "Hello World!";
string myShortString = myLongString.Right(6); // "World!"
string myLeftString = myLongString.Left(5); // "Hello"
string myMidString1 = myLongString.Left(4); // "lo World"
string myMidString2 = myLongString.Left(2,3); // "ell"
String.IsNullOrEmpty () 및 String.IsNullOrWhiteSpace ()를 사용하여 빈 문자열을 확인합니다.
string nullString = null;
string emptyString = "";
string whitespaceString = " ";
string tabString = "\t";
string newlineString = "\n";
string nonEmptyString = "abc123";
bool result;
result = String.IsNullOrEmpty(nullString); // true
result = String.IsNullOrEmpty(emptyString); // true
result = String.IsNullOrEmpty(whitespaceString); // false
result = String.IsNullOrEmpty(tabString); // false
result = String.IsNullOrEmpty(newlineString); // false
result = String.IsNullOrEmpty(nonEmptyString); // false
result = String.IsNullOrWhiteSpace(nullString); // true
result = String.IsNullOrWhiteSpace(emptyString); // true
result = String.IsNullOrWhiteSpace(tabString); // true
result = String.IsNullOrWhiteSpace(newlineString); // true
result = String.IsNullOrWhiteSpace(whitespaceString); // true
result = String.IsNullOrWhiteSpace(nonEmptyString); // false
특정 인덱스에서 문자 가져 오기 및 문자열 열거
Substring
메서드를 사용하면 주어진 위치에서 문자열의 문자를 원하는만큼 가져올 수 있습니다. 그러나 단일 문자 만 원할 경우 배열과 마찬가지로 주어진 색인에서 단일 문자를 가져 오기 위해 문자열 인덱서를 사용할 수 있습니다.
string s = "hello";
char c = s[1]; //Returns 'e'
string
형을 돌려주는 Substring
메소드와는 Substring
, 반환 값의 형태는 char
입니다.
또한 인덱서를 사용하여 문자열의 문자를 반복 할 수 있습니다.
string s = "hello";
foreach (char c in s)
Console.WriteLine(c);
/********* This will print each character on a new line:
h
e
l
l
o
**********/
십진수를 2 진수, 8 진수 및 16 진수 형식으로 변환
10 진수를 2 진수 형식으로 변환하려면 밑 2를 사용하십시오.
Int32 Number = 15; Console.WriteLine(Convert.ToString(Number, 2)); //OUTPUT : 1111
10 진수를 8 진수 형식으로 변환하려면 기본 8을 사용하십시오.
int Number = 15; Console.WriteLine(Convert.ToString(Number, 8)); //OUTPUT : 17
10 진수를 16 진수 형식으로 변환하려면 기본 16
var Number = 15; Console.WriteLine(Convert.ToString(Number, 16)); //OUTPUT : f
문자열을 다른 문자열로 나누기
string str = "this--is--a--complete--sentence";
string[] tokens = str.Split(new[] { "--" }, StringSplitOptions.None);
결과:
[ "this", "is", "a", "complete", "sentence"]
문자열을 올바르게 뒤집기
사람들이 문자열을 뒤집어 야 할 때 대부분 다음과 같이합니다.
char[] a = s.ToCharArray();
System.Array.Reverse(a);
string r = new string(a);
그러나 이러한 사람들이 인식하지 못하는 것은 실제로 이것이 잘못되었다는 것입니다.
그리고 누락 된 NULL 검사 때문에 나는 의미하지는 않습니다.
Glyph / GraphemeCluster는 여러 코드 포인트 (일명 문자)로 구성 될 수 있기 때문에 실제로 잘못되었습니다.
왜 이렇게되는지 보려면 먼저 "캐릭터"라는 용어가 실제로 의미하는 사실을 알고 있어야합니다.
캐릭터는 많은 것을 의미 할 수있는 것보다 과부하 된 용어입니다.
코드 포인트는 정보의 원자 단위입니다. 텍스트는 일련의 코드 포인트입니다. 각 코드 포인트는 유니 코드 표준에 의해 주어진 숫자입니다.
grapheme은 독자가 서체 시스템의 단일 요소로 인식하는 단일 그래픽 단위로 표시되는 하나 이상의 코드 포인트 시퀀스입니다. 예를 들어, a와 ä는 둘 다 graphemes이지만 여러 개의 코드 포인트로 구성 될 수 있습니다 (예 : ä는 두 개의 코드 포인트가 될 수 있습니다. 하나는 기본 문자 a에 이어 하나는 diaresis이고 다른 하나는 기존의 단일 코드입니다) 이 글자를 나타내는 점). 일부 코드 포인트는 어떤 제자 (예 : 제로 너비 비 연결자 또는 방향 재 지정)의 일부가 아닙니다.
글립 문자는 일반적으로 글꼴 (글립 문자 모음)에 저장되는 이미지로, 글자체 또는 그 일부를 나타내는 데 사용됩니다. 폰트는, 복수의 그리 후를 단일의 표현으로 구성 할 수 있습니다. 예를 들어, 위의 코드가 단일의 코드 포인트 인 경우, 폰트는 그것을 공간 상으로는 2 개의 분리 된 그리 후로서 렌더링하는 경우가 있습니다. OTF의 경우 글꼴의 GSUB 및 GPOS 테이블에는이 작업을 수행하기위한 대체 및 위치 정보가 포함됩니다. 글꼴에는 동일한 글자체에 대해 여러 대체 글리프가 포함될 수 있습니다.
그래서 C #에서 문자는 실제로 CodePoint입니다.
즉, Les Misérables
와 같은 유효한 문자열을 역순으로 처리하면 다음과 같이 보일 수 있습니다.
string s = "Les Mise\u0301rables";
일련의 문자로 다음을 얻을 수 있습니다.
셀 세이
보시다시피 악센트는 e 문자 대신 R 문자에 있습니다.
두 번 모두 문자 배열을 역순으로하면 string.reverse.reverse가 원래 문자열을 반환하지만이 종류의 역전은 원래 문자열의 역순이 아닙니다.
각 GraphemeCluster 만 리버스해야한다.
따라서 올바르게 수행되면 다음과 같이 문자열을 뒤집습니다.
private static System.Collections.Generic.List<string> GraphemeClusters(string s)
{
System.Collections.Generic.List<string> ls = new System.Collections.Generic.List<string>();
System.Globalization.TextElementEnumerator enumerator = System.Globalization.StringInfo.GetTextElementEnumerator(s);
while (enumerator.MoveNext())
{
ls.Add((string)enumerator.Current);
}
return ls;
}
// this
private static string ReverseGraphemeClusters(string s)
{
if(string.IsNullOrEmpty(s) || s.Length == 1)
return s;
System.Collections.Generic.List<string> ls = GraphemeClusters(s);
ls.Reverse();
return string.Join("", ls.ToArray());
}
public static void TestMe()
{
string s = "Les Mise\u0301rables";
// s = "noël";
string r = ReverseGraphemeClusters(s);
// This would be wrong:
// char[] a = s.ToCharArray();
// System.Array.Reverse(a);
// string r = new string(a);
System.Console.WriteLine(r);
}
그리고 - 오, 기쁨 - 당신이 올바르게 이것을하면 아시아 / 동남 아시아 / 동아시아 언어 (및 프랑스어 / 스웨덴어 / 노르웨이어 등)에서도 작동 할 것입니다.
문자열 내의 문자열 바꾸기
System.String.Replace
메서드를 사용하면 문자열의 일부를 다른 문자열로 바꿀 수 있습니다.
string s = "Hello World";
s = s.Replace("World", "Universe"); // s = "Hello Universe"
검색 문자열의 모든 항목이 대체됩니다.
이 메서드는 String.Empty
필드를 사용하여 문자열의 일부를 제거하는 데에도 사용할 수 있습니다.
string s = "Hello World";
s = s.Replace("ell", String.Empty); // s = "Ho World"
String 내의 문자의 대 / 소문자 변경
System.String
클래스는 문자열의 대문자와 소문자를 서로 변환하는 여러 가지 메서드를 지원합니다.
-
System.String.ToLowerInvariant
는 소문자로 변환 된 String 개체를 반환하는 데 사용됩니다.
-
System.String.ToUpperInvariant
는 대문자로 변환 된 String 개체를 반환하는 데 사용됩니다.
참고 : 이 방법의 불변 버전을 사용하는 이유는 예기치 않은 문화권 문자가 생성되는 것을 방지하기 위해서입니다. 이에 대해서는 여기에서 자세히 설명 합니다.
예:
string s = "My String";
s = s.ToLowerInvariant(); // "my string"
s = s.ToUpperInvariant(); // "MY STRING"
그에 따라 String.ToLower (CultureInfo) 및 String.ToUpper (CultureInfo) 메서드를 사용하여 소문자 및 대문자로 변환 할 때 특정 문화권 을 지정하도록 선택할 수 있습니다.
문자열 배열을 단일 문자열로 연결
System.String.Join
메서드를 사용하면 각 요소 사이에 지정된 구분 기호를 사용하여 문자열 배열의 모든 요소를 연결할 수 있습니다.
string[] words = {"One", "Two", "Three", "Four"};
string singleString = String.Join(",", words); // singleString = "One,Two,Three,Four"
문자열 연결
문자열 연결은 System.String.Concat
메서드를 사용하거나 +
연산자를 사용하여 훨씬 쉽게 수행 할 수 있습니다.
string first = "Hello ";
string second = "World";
string concat = first + second; // concat = "Hello World"
concat = String.Concat(first, second); // concat = "Hello World"
C # 6에서는 다음과 같이 할 수 있습니다.
string concat = $"{first},{second}";