C#에서 데이터 형식을 상황에 맞게 적합한 데이터로 형식을 변환해주어야 합니다
클래스와 메서드 또는 캐스팅으로 데이터 캐스트 및 형식 변환을 할 수 있습니다
또한 사용하는 데이터를 배열에 담거나 특수한 문자 서식을 갖는 데이터를
형식에 맞는 메서드를 통해 추출, 제거 및 수정함으로써 활용할 수 있습니다
Convert 클래스를 사용하여 문자열을 숫자로 변환하기
float 형식은 없지만, byte, int, decimal 등등 여러 가지 형식으로의 변환을 지원합니다
string value1 = "5";
string value2 = "7";
int result = Convert.ToInt32(value1) * Convert.ToInt32(value2);
Console.WriteLine(result);
output :
35
캐스팅 연산자로 데이터 형식 변환하기
decimal mydecimal = 1.123123611111m;
Console.WriteLine($"decimal: {mydecimal}");
float myFloat = (float)mydecimal;
Console.WriteLine($"float: {myFloat}");
output :
decimal: 1.123123611111
float: 1.123124
ToString() 메서드를 사용하여 문자열로 변환하기
int first = 5;
int second = 7;
string message = first.ToString() + second.ToString();
Console.WriteLine(message);
output :
57
Parse() 메서드를 사용하여 문자를 숫자로 변환하기
문자열에서 숫자 형식의 데이터를 추출하는 기능입니다
int, float, decimal, double 등등 거의 모든 숫자 형식을 지원합니다
string first = "5";
string second = "7";
int sum = int.Parse(first) + int.Parse(second);
Console.WriteLine(sum);
output :
12
TryParse() 메서드로 변환하기
문자열 배열에서 숫자와 문자를 구별하여 성공 여부와 매개변수를 출력합니다
성공한 경우, 변환된 값을 out 매개 변수로 출력한다
성공 여부를 나타내는 bool 값을 반환한다
// 예시1
string[] values = { "12.3", "45", "ABC", "11", "DEF" };
string strVal1 = string.Empty;
double intVal1 = 0;
foreach(var value in values)
{
double val = 0;
if(double.TryParse(value, out val))
{
intVal1 += val;
}
else
{
strVal1 += value.ToString();
}
}
Console.WriteLine("Message: " + strVal1);
Console.WriteLine("Total: " + intVal1);
output :
Message: ABCDEF
Total: 68.3
// 예시2
int value1 = 12;
decimal value2 = 1.4418604651162790697674418605m;
float value3 = 0.3583333f;
int val1 = 0;
decimal val2 = 0;
float val3 = 0;
if(int.TryParse(value1.ToString(), out val1))
{
string result1 = (value1/val1).ToString();
Console.WriteLine($"int: {result1}");
}
if(decimal.TryParse(value2.ToString(), out val2))
{
string result2 = val2.ToString();
Console.WriteLine($"decimal: {result2}");
}
if(float.TryParse(value3.ToString(), out val3))
{
string result3 = val3.ToString();
Console.WriteLine($"float: {result3}");
}
tip.
기본 제공 형식
"https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/built-in-types"
.NET 형식의 변환표
"https://docs.microsoft.com/ko-kr/dotnet/standard/base-types/conversion-tables"
tip.
데이터를 변환할 때 축소 변환과 확대 변환이 수행되는데
특히 캐스팅 형식으로 데이터를 변환할 경우 데이터 손실의 위험을 인지해야 한다
Console.WriteLine((decimal)1.232132112323232 );
Console.WriteLine(1.232132112323232m);
output :
1.23213211232323
1.232132112323232
배열에서 항목 지우기
Array 클래스의 Clear 메서드에 매개변수를 각각( 처리할 배열, 시작 지점, 마지막 지점) 순서로 넣어주면 됩니다
string[] pallets = { "B14", "A11", "B12", "A13" };
Array.Clear(pallets, 0, 2);
int i = 0;
foreach (var pallet in pallets)
{
Console.WriteLine($"pallets {i} / {pallet}");
i++;
}
output :
pallets 0 /
pallets 1 /
pallets 2 / B12
pallets 3 / A13
tip.
$"pallets[0] 값은 null 값이기 때문에 불러올 경우 오류가 발생할 수 있습니다
그러므로 예외처리를 해줘야 되는데 null 값인지 확인하는 구문을 넣어주면 오류를 해결할 수 있습니다"
// 예시1
if (pallets[0] != null)
Console.WriteLine($"After: {pallets[0].ToLower()}");
배열 크기 조절하기
데이터를 생성하고 Array 클래스의 Resize 메서드에 매개변수를 각각( ref 처리할 배열, 크기) 순서로 넣어주면 됩니다
만약 입력한 크기 값이 최초 배열 길이보다 크다면 데이터가 삭제될 수 있음에 주의해야 합니다
또한 삭제되거나 증가된 배열 값은 null입니다
string[] pallets = { "A1", "A2", "B1", "A2" };
Console.WriteLine($"Before : {pallets.Length}");
Array.Resize(ref pallets, 6);
Console.WriteLine($"After : {pallets.Length}");
pallets[4] = "C01";
pallets[5] = "C02";
int i =0;
foreach (var pallet in pallets)
{
Console.WriteLine($"{i} {pallet}");
i++;
}
output :
Before : 4
After : 6
0 A1
1 A2
2 B1
3 A2
4 C01
5 C02
배열 정방향 역방향 정렬하기 ( ToCharArray(), Array.Reverse(), String.Join() )
// 정방향
string value = "abc123";
char[] valueArray = value.ToCharArray();
string result = new string(valueArray);
Console.WriteLine(result);
// 역방향
Array.Reverse(valueArray);
result = new string(valueArray);
Console.WriteLine(result);
// 콤마찍기 정방향
string value1 = "abc123";
char[] valueArray1 = value1.ToCharArray();
result = String.Join(",", valueArray1);
Console.WriteLine(result);
// 콤마찍기 역방향
Array.Reverse(valueArray1);
result = String.Join(",", valueArray1);
Console.WriteLine(result);
output :
abc123
321cba
a,b,c,1,2,3
3,2,1,c,b,a
문자열 배열 분할하기
result 변수에 문자열 "A1, A2, A3,1,2"이 들어있습니다
이 문자열에 포함된 콤파(,)를 기준으로 Char 형식으로 데이터를 쪼갤 수 있습니다
기준은 콤파가 아니어도 되며 문자열은 큰따옴표("")로 문자는 작은따옴표('')로 나타낼 수 있습니다
string result = "A1,A2,A3,1,2";
Console.WriteLine(result);
string[] items = result.Split(',');
foreach (string item in items)
{
Console.WriteLine(item);
}
output :
A1,A2,A3,1,2
A1
A2
A3
1
2
정렬 활용하기
지금까지 알아본 문법을 활용하여, 문자열의 역방향 정렬과 단어별 역방향 정렬을 구현해보았습니다
보기에는 단순해 보이지만 의외로 오류가 많이 발생하며 확실하게 모를 경우 많은 오류가 발생할 수 있습니다
직접 한번 해보시고 여러 가지 방법으로 시도하면서 익숙해지시는 것을 권합니다
// 예시1
string str = "The quick brown fox jumps over the lazy dog";
Console.WriteLine("정렬 처리 할 문장 : " + str);
char[] charArray = str.ToCharArray();
Array.Reverse(charArray);
string strReverse = new string(charArray);
Console.WriteLine("단순한 역방향 정렬 : " + strReverse);
string[] data = strReverse.Split(' ');
Array.Reverse(data);
//var data1 = data.Reverse();
var data1 = String.Join(" ", data);
Console.WriteLine("단어별 역방향 정렬 : " + data1);
output :
정렬 처리 할 문장 : The quick brown fox jumps over the lazy dog
단순한 역방향 정렬 : god yzal eht revo spmuj xof nworb kciuq ehT
단어별 역방향 정렬 : ehT kciuq nworb xof spmuj revo eht yzal god
// 예시2
string pangram = "The quick brown fox jumps over the lazy dog";
string[] message = pangram.Split(' ');
string[] newMessage = new string[message.Length];
for (int i = 0; i < message.Length; i++)
{
char[] letters = message[i].ToCharArray();
Array.Reverse(letters);
newMessage[i] = new string(letters);
}
string result = String.Join(" ", newMessage);
Console.WriteLine(result);
output :
ehT kciuq nworb xof spmuj revo eht yzal god
원하는 문자 골라서 출력하기 ( Contains() )
문자열 "B"가 포함된 값을 찾아서 출력하는 코드입니다
예시 1의 경우 해당 문자열에 "B"가 포함되면 출력하고, 예시 2의 경우 "B"로 시작하는 문자열을 출력합니다
// 예시1
string orderStream = "B123,C234,A345,C15,B177,G3003,C235,B179";
string[] data = orderStream.Split(',');
foreach(var val in data)
{
if(val.Contains("B"))
Console.WriteLine(val);
}
output :
B123
B177
B179
// 예시2
string orderStream = "B123,C234,A345,C15,B177,G3003,C235,B179";
string[] items = orderStream.Split(',');
foreach (var item in items)
{
if (item.StartsWith("B"))
{
Console.WriteLine(item);
}
}
output :
B123
B177
B179
'공방 > 학습 일지' 카테고리의 다른 글
[ .NET ] 파싱한 문자열에서 데이터 추출하기 (0) | 2020.12.07 |
---|---|
[ .NET ] 문자열 서식에 자주 쓰는 메서드 (0) | 2020.11.30 |
[ Python ] 을 시작해보자 (0) | 2020.11.20 |
[ .NET ] File 및 Directory 작업 활용2 (0) | 2020.11.16 |
[ .NET ] File 및 Directory 작업 활용1 (0) | 2020.11.15 |