Presentation is loading. Please wait.

Presentation is loading. Please wait.

7장 문자열 클래스.

Similar presentations


Presentation on theme: "7장 문자열 클래스."— Presentation transcript:

1 7장 문자열 클래스

2 String 클래스 - 문자열 처리와 관련된 다양한 메서드를 제공 - System.Char의 순차적인 집합, 즉 유니코드(Unicode)문자의 연속된 집합 - 문자열을 생성하기 위해서는 따옴표(“ ”)를 사용 - 문자열에서 특수문자를 문자 그대로 받아들일 때는 사용 - 문자열은 인덱서를 구현하고 있기 때문에 문자 배열처럼 사용 - 문자열은 참조 타입(Reference Type)으로 String 클래스의 객체윈도우가 디바이스 드라이버에 독립적으로 프로그래밍을 할 수 있는 모든 기능을 제공 - 예1) string myString = "Hello "; //string형의 myString 문자열을 생성 - 예2) string myString = "Hello " + "Programming"; //"Hello Programming" string myString = 10 + " * " + 20 ; //"10 * 20" - 예3) string myString

3 String 클래스의 주요 속성과 메소드 속성 설명 Chars 특정 위치에 있는 문자 Length 문자 수 메소드 설명
Clone 객체에 대한 참조를 반환 Compare 지정한 두 String 객체를 비교하는 정적 메서드 CompareTo 지정한 객체나 String과 비교 Format 문자열의 포맷을 지정해 출력하는 정적 메서드 IndexOf 문자열의 첫머리부터 주어진 문자열을 찾아 위치를 반환 Insert 문자열에 지정한 문자열을 지정한 위치에 추가 LastIndexOf 문자열의 뒤부터 주어진 문자열을 찾아 위치를 반환 PadLeft 어떤 문자를 지정된 횟수만큼 반복해 문자열의 앞에 추가 PadRight 어떤 문자를 지정된 횟수만큼 반복해 문자열의 뒤에 추가 Remove 문자열에서 지정한 수의 문자를 삭제 Replace 문자열 내의 특정 문자/문자열을 다른 문자/문자열로 교체 Split 지정한 Char 또는 String 배열의 요소에 의해 구분된 부분 문자열이 포함된 String 배열을 반환 ToLower 문자열을 소문자로 변환 ToUpper 문자열을 대문자로 변경 Trim 문자열의 시작부분과 끝부분에 포함된 공백 제거

4 - 예1) Console.WriteLine("str의 길이는 : {0} ", str.Length); Console.WriteLine("대문자로 변환 : {0}", str.ToUpper()); Console.WriteLine("소문자로 변환 : {0}", str.ToLower()); - 예2) 문자열을 대소문자로 변환하여 출력하기 class Program { public static void Main() { string str = "Hello C# Program"; //str에 문자열을 입력 Console.WriteLine("문자열 :{0}", str);//str을 출력 Console.WriteLine(); char ch0=str[0]; //문자열을 배열처럼 사용 char ch1=str[1]; Console.WriteLine("배열의 str[0], str[1] : {0}, {1} ", ch0, ch1); Console.WriteLine("문자열의 길이는 : {0} ", str.Length); Console.WriteLine("대문자로 변환 : {0}", str.ToUpper()); Console.WriteLine("소문자로 변환 : {0}", str.ToLower()); }

5 - 예3) 다양한 문자열 메소드 이용하기 class Program { public static void Main() { string str = "Hello Hi String Program"; char MyChar = 'X'; Console.WriteLine("원문 str:{0}",str); //원문출력 //처음부터 Hi를 검색해 값 반환 Console.WriteLine("Index of \"Hi\":{0}",str.IndexOf("Hi")); //마지막부터 Hi 검색해서 값 반환 Console.WriteLine("LastIndex of \"Hi\": {0}", str.LastIndexOf("Hi")); //X를 지정된 길이에 남는 만큼 반복해 문자열의 앞에 추가 Console.WriteLine("PadLeft : {0}", str.PadLeft(30, MyChar)); //X를 지정된 길이에 남는 만큼 문자열의 뒤에 추가 Console.WriteLine("PadRight : {0}", str.PadRight(30, MyChar)); //Program을 Class로 바꿔서 출력 Console.WriteLine("Replace \"Program\" to \"Class\": {0}", str.Replace("Program","Class")); }

6 - 예4) 문자열 공백제거와 문자열 비교하기 class Program { public static void Main() { string str1 = " KOREA "; //공백이 앞뒤에 있는 문자열 string str2 = " SEOUL"; string str3 = " CITY"; Console.WriteLine("[{0}]", str1); Console.WriteLine("[{0}]", str1.TrimStart()); //왼쪽 공백 제거 Console.WriteLine("[{0}]", str1.TrimEnd()); //오른쪽 공백 제거 Console.WriteLine("[{0}]", str1.Trim()); //양쪽 공백 제거 Console.WriteLine("[{0}]", str1.Insert(8, "IN")); //9번째 위치에 IN 삽입 string str4 = string.Concat(str1,str2,str3); //문자열들을 연결 Console.WriteLine("[{0}]", str4); str4 = str4.Remove(7,2); //8번째 문자에서 2개 문자 제거 //str4과 입력 문자열을 비교해 같으면 0, 크면 양수, 작으면 음수반환 if(str4.CompareTo(" KOREA SEOUL CITY") == 0) Console.WriteLine("같습니다."); else Console.WriteLine("같지 않습니다."); }

7 - 예5) 구분자를 기준으로 문자열 분리하기 - 예6) 원하는 문자열 추출하기 class Program {
static void Main(string[] args){ string str1 = "SEOUL, SUWON, PUSAN, DAEGU, SUNGNAM"; string [] str2; // 분리된 문자열을 저장할 배열 str2 = str1.Split(','); //구분자로 구분해서 string 배열에 구분해 넣음 for(int i=0; i<str2.Length;i++) Console.WriteLine("{0}", str2[i].Trim()); //양쪽 공백 제거 } - 예6) 원하는 문자열 추출하기 class Program { static void Main(string[] args) { string str1 = "왼쪽에 기술하는 인덱스는 추출할"; //문자열 string str2; string str3; str2 = str1.Substring(4,9); //문자열 추출 5번째부터 9개 문자를 추출 Console.WriteLine("추출한 문자열 -> {0}",str2); str3 = str1.Substring(4); //문자열 추출 5번째부터 끝까지 Console.WriteLine("추출한 문자열 -> {0}",str3); }

8 - 예7) 문자열의 유효성 검사(꼭 실행해보세요)
public class Program { private bool Str_Check(string str) { string lower_str = str.ToLower();// 소문자로 만들기 foreach(char ch in lower_str) { // a~z , 0~9 안에 포함되었는지 검사 if(((ch < 'a') || (ch > 'z')) && ((ch < '0') ||(ch > '9'))) return false; } return true; private bool Tel_Check(string str) { if(lower_str.IndexOf("-") == -1) { // 문자열 내에 '-'가 있는지 확인 foreach(char ch in str) { if( ( ch !='-' ) && ((ch < '0') || (ch > '9'))) return false;

9 private bool Digit_Check(string str) {
foreach(char ch in str) { if((ch < '0') || (ch > '9')) return true; // 0~9 숫자 인지 확인 } return false; private bool _Check(string str) { byte stock = 0 ; foreach(char ch in str) {// 전자 우편 와 . 이 포함되어 있음 if( ch == || ch == '.' ) stock++ ; if( stock >= 2) return true ; return false ;

10 private bool Check_Digit( string str) {
if(Digit_Check( str )) return false ; // 숫자만 입력했는지 체크 if( str.Length != 13 ) return false ; // 13자리 주민 번호 체크 int sum = 0 ; int temp = 0 ; int [] num = new int[13] ; // 주민 번호를 배열에 저장 int [] digit = {2,3,4,5,6,7,8,9,2,3,4,5}; // 가중치 값 저장 for( int i = 0 ; i< 13 ; i++) { // 입력된 문자를 숫자로 num[i] = Int32.Parse(str[i]+"") ; } // 주민 번호 유효성 검사 for(int i=0; i<12; i++) { sum += digit[i] * num[i]; } temp = sum%11 ; int check_digit_num1 = temp; int check_digit_num2 = num[12]; if(check_digit_num1 == 0) { if(check_digit_num2 == 1) return true; else return false;

11 if(check_digit_num1 == 0) {
return true; else return false; } else if(check_digit_num1 == 1) { if(check_digit_num2 == 0) else if((11-check_digit_num1) == check_digit_num2) return true; else return false; public static void Main() { Program obj = new Program(); //유효성 검증 클래스 객체 생성 Console.Write("영문자 혹은 숫자 문자열을 입력하세요. : "); string msg = Console.ReadLine(); //문자열 입력 if(obj.Str_Check(msg.Trim())) { //유효성 검증 Console.WriteLine("{0}: 영문자 혹은 숫자", msg);

12 public static void Main() {
Program obj = new Program(); //유효성 검증 클래스 객체 생성 Console.Write("영문자 혹은 숫자 문자열을 입력하세요. : "); string msg = Console.ReadLine(); //문자열 입력 if(obj.Str_Check(msg.Trim())) { //유효성 검증 Console.WriteLine("{0}: 영문자 혹은 숫자", msg); } else { Console.WriteLine("{0}: 영문자/ 숫자가 아닌 문자 있음!", msg); Console.Write("전화번호를 입력하세요.(예. xxx-xxx-xxxx) : ”) ; msg = Console.ReadLine(); //전화 번호 입력 if(obj.Tel_Check(msg.Trim())){ //전화번호 유효성 검사 Console.WriteLine("{0}는 유효한 전화번호입니다.", msg); Console.WriteLine("{0}는 유효하지 않은 전화번호입니다.", msg); Console.Write(" 주소를 입력하세요. : "); msg = Console.ReadLine(); // 주소 입력 if(obj. _Check(msg.Trim())){ // 주소 유효성 검사 Console.WriteLine("{0}는 유효한 전자 우편 주소입니다.", msg);

13 else { Console.WriteLine("{0}는 틀린 전자우편주소입니다.", msg); } Console.Write("- 없이 주민 번호를 입력하세요. : "); msg = Console.ReadLine(); //주민 번호 입력 if(obj.Check_Digit(msg.Trim())){ //주민 번호 유효성 검사 Console.WriteLine("{0}는 유효한 주민 번호입니다.", msg); Console.WriteLine("{0}는유효하지 않은 주민 번호입니다.", msg);

14 - String 객체는 수정될 때 수정 사항을 포함시킨 새로운 String 객체를 반환
StringBuilder 클래스 - String 객체는 수정될 때 수정 사항을 포함시킨 새로운 String 객체를 반환 - StringBuilder 클래스를 이용해 생성한 객체는 문자를 추가, 제거, 수정 및 변경 하는 기능을 포함 - 동적으로 용량이 증가 - 초기화될 때 지정된 용량이 없으면 기본 용량(Capacity)은 16 - 주요 속성과 메소드 속성 설명 Capacity 현재 객체에 의해 할당된 메모리에 포함할 수 있는 최대 문자 수 Chars 인스턴트에서 특정 위치에 있는 문자 Length 현재 StringBuilder 개체의 길이 속성 설명 Append 지정된 문자열 표현을 StringBuilder 객체의 끝에 추가 EnsureCapacity 객체의 용량을 최소한 지정된 값이 되도록 함 Insert 현재 문자열 사이에 지정한 문자열을 추가 Remove 문자를 현재 문자열에서 삭제 Replace 문자열에서 특정 문자/문자열을 찾아 교체 ToString StringBuilder를 String으로 변환

15 - 예) StringBuiler 사용 예제 class Program {
static void Main(string[] args) { StringBuilder buffer = new StringBuilder( "Hello, C# Programming" ); // 현 문자열 길이 및 용량 string output = "buffer = " + buffer.ToString() + "\nLength = " + buffer.Length + "\nCapacity = " + buffer.Capacity; // 용량이 최소한의 지정된 값이 되도록 함 buffer.EnsureCapacity( 70 ); output += "\n\nNew capacity = " + buffer.Capacity; // StringBuilder의 길이를 재설정 buffer.Length = 10; output += "\n\nNew length = " + buffer.Length + "\nbuffer = "; // 길이를 index로 이용 for ( int i = 0; i < buffer.Length; i++ ) output += buffer[ i ]; MessageBox.Show( output, "StringBuilder features", MessageBoxButtons.OK, MessageBoxIcon.Information ); }

16 - StringBuilder 클래스에서 제공하는 메서드를 이용하면 문자열을 삽입, 추가, 수정, 제거가 용이 - 예)
문자열 삽입, 추가, 수정, 제거 - StringBuilder 클래스에서 제공하는 메서드를 이용하면 문자열을 삽입, 추가, 수정, 제거가 용이 - 예) class Program { static void Main(string[] args) { //여러 형식의 문자열 선언 object objectValue = "C#"; string stringValue = "Programming"; char[] characterArray = { 'p', 'o', 'w', 'e', 'r' }; bool booleanValue = true; char characterValue = 'Z'; int integerValue = 3; long longValue = ; float floatValue = 5.5F; double doubleValue = ; StringBuilder buffer = new StringBuilder(); // buffer 뒤에 순서대로 모두 붙임 buffer.Append( objectValue ); //"C#" 추가 buffer.Append( " / " ); //" / " 추가 buffer.Append( stringValue ); // "Programming" 추가 buffer.Append( " / " ); buffer.Append( characterArray ); //"power" 추가 buffer.Append( characterArray, 0, 3 ); // "pow" 추가

17 buffer.Append( " / " ); buffer.Append( booleanValue ); // "True" 추가 buffer.Append( characterValue ); // "Z" 추가 buffer.Append( integerValue ); //"3" 추가 buffer.Append( longValue ); // " " 추가 buffer.Insert( 58,floatValue ); //58번째에 floatValue를 삽입 buffer.Insert( 62,doubleValue ); //62번째 doubleValue를 삽입 //메시지 박스에 출력 MessageBox.Show( "buffer = " + buffer.ToString(), "Demonstrating StringBuilder append method", MessageBoxButtons.OK, MessageBoxIcon.Information ); // 문자열을 일부 수정 buffer.Replace('/', '#', 5, 65);//5에서 65번째 사이의 ‘/’ 를 ‘#’로 바꿈 buffer.Remove(5,11); //5번째부터 11개 문자(Programming)를 제거 //수정한 문자열을 메시지박스에 출력 }

18 String 클래스와 StringBuilder 클래스의 성능 비교 - 예 1)
class Program { static void Main(string[] args) { // 경과한 100나노초 간격의 수로 설정 long start = DateTime.Now.Ticks; System.String str = null; //str 문자열 선언 for(int i = 0 ; i < ; i++) { //안녕하세요 20000번 연결 str +="안녕하세요"; } long end = DateTime.Now.Ticks; Console.WriteLine("str 내용: {0}", str); //문자열 내용 출력 Console.WriteLine("str 크기: {0}", str.Length); //문자열 길이 출력 Console.WriteLine("소요 시간 : {0}", end - start);//소요 시간 출력 Console.ReadLine();

19 - 예 2) class Program { static void Main(string[] args) {
long start = DateTime.Now.Ticks; //시작시간 System.Text.StringBuilder str = new System.Text.StringBuilder(); for(int i = 0 ; i < ; i++){ //안녕하세요 20000번 연결 str.Append("안녕하세요"); } long end = DateTime.Now.Ticks; //종료 시간 Console.WriteLine("str 내용: {0}", str); //문자열 내용 출력 Console.WriteLine("str 크기: {0}", str.Length); //문자열 길이 출력 Console.WriteLine("소요 시간 : {0}", end - start); //소요 시간 출력 Console.ReadLine();

20 - 닷넷에서는 숫자들을 다양한 형식과 단위로 표현할 수 있는 많은 기능을 제공 - 형식 문자
문자열 형식 - 닷넷에서는 숫자들을 다양한 형식과 단위로 표현할 수 있는 많은 기능을 제공 - 형식 문자 - 표준 형식 문자. 서술 문자 형식 숫자 형식 문자 설명 화폐 C, c 숫자를 화폐 단위로 나타낼 때 사용 10진법 D, d 디폴트 형식으로 숫자를 10진법으로 나타낼 때 사용 지수 E, e 숫자를 지수로 나타낼 때 사용 고정소수점 F, f 숫자를 소수점이 있는 형식으로 나타낼 때 사용 일반 G, g 숫자를 명시된 자리 수에 맞게 알맞은 형식으로 표현 숫자 N, n 자리수가 큰 숫자를 콤마로 표시해 주고 형식 문자 뒤에 나오는 수는 소수점 자리수를 명시 16진수 X, x 숫자를 16진법으로 나타낼 때 사용 - 예) string str = string.Format("{0:C}", 1234); //화폐 단위 Console.WriteLine("{0}", str); Console.WriteLine("{0:C}", 1234); //화폐 단위 Console.WriteLine("{0:D10}", 1234); //10진법

21 서술형식문자 - 예) Console.WriteLine("{0:#####}", 1234); // 공백으로 채움
형식 문자 설명 0으로 자리를 채워줌 # 공백으로 자리를 채워줌 . 소수점의 위치를 결정 , 숫자를 분리해서 표현 % 퍼센트 형식으로 표현 E+0 , E-0 0의 개수에 의해 지수를 표현 \ \ 뒤에 나오는 문자는 형식 문자가 아님을 나타냄 ; 한 개 사용하면 왼쪽은 양 또는 0일 때의 형식을 나타내고 2개를 사용하면 왼쪽부터 양수, 음수, 0일 때의 형식을 나타냄 - 예) Console.WriteLine("{0:#####}", 1234); // 공백으로 채움 Console.WriteLine("{0: }", 1234); // 소숫점 이하 4자리까지 Console.WriteLine("{0:00.0%}", ); // % 형식 Console.WriteLine("{0: E+0}", ); // 지수 형식 1234); // #는 형식문자가 아님 // 양, 음, 0일 때의 형식 Console.WriteLine("{0:00.00%;00.0E-0;00}", );


Download ppt "7장 문자열 클래스."

Similar presentations


Ads by Google