7장 문자열 클래스.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

SCJP. Garbage Collection  Garbage Collector( 이하 GC) 가 Heap 영역 에 할당된, 더 이상 사용되지 않는 메모리인 Garbage 를 다른 객체가 사용할 수 있도록 정리하는 것.  C++ 에서의 메모리 해제 int* v=new.
Python Ch.06 RaspberryPi Sejin Oh. Raspberry Pi Python  IDLE(Integrated Development Environment)  라즈베리 파이 배포본들은 일반적으로 파이썬과 파이썬 3 의 IDLE 파 이썬 개발 도구를.
Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
12장 문자열 12.1 문자열의 개요 12.2 String 클래스 12.3 StringBuffer 클래스
자바 키워드 & 문자열 다루기 인터넷 프로그래밍 강의자료 3 (1, 3반) 한용재
DB 프로그래밍 학기.
DB 프로그래밍 학기.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
최윤정 Java 프로그래밍 클래스 상속 최윤정
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
제 9 장 구조체와 공용체.
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
7장 배열 ②.
5장 배열 작성자 : 변재현.
Lesson 5. 레퍼런스 데이터형.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
forms 객체 입력상자 체크상자, 라디오 버튼 목록상자
4.1 자바 응용 프로그램 분석 4.2 식별자(identifier)와 예약어 4.3 변수와 자료형
Lesson 9. 예외처리.
Lesson 6. 형변환.
5장. 참조 타입.
제 3장. C보다 나은 C++ II.
Heesang kim PL/SQL 3 Heesang kim.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
3장 자바의 기본문법(2).
6장. printf와 scanf 함수에 대한 고찰
프로그래밍 랩 – 7주 리스트.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
자바 5.0 프로그래밍.
11장. 1차원 배열.
C#.
13. 연산자 오버로딩.
12장 문자열 12.1 문자열의 개요 12.2 String 클래스 12.3 StringBuffer 클래스.
7장 인터페이스와 추상 클래스.
JA A V W. 03.
인터넷응용프로그래밍 JavaScript(Intro).
Lesson 4. 수식과 연산자.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
자바 5.0 프로그래밍.
Chapter 02. 자바 기본 문법.
JA A V W. 06.
Choi Seong Yun 컴퓨터 프로그래밍 기초 #03 : 변수와 자료형 Choi Seong Yun
CHAP 21. 전화, SMS, 주소록.
객체기반 SW설계 팀활동지 4.
Canary value 스택 가드(Stack Guard).
[ 단원 04 ] 반복과 배열.
데이터 동적 할당 Collection class.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Chapter 10 데이터 검색1.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
6 객체.
3장 자바의 기본문법(2).
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

7장 문자열 클래스

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 = @"c:\C#Programing\world";

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

- 예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()); }

- 예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")); }

- 예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("같지 않습니다."); }

- 예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); }

- 예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;

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

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;

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);

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("e-mail 주소를 입력하세요. : "); msg = Console.ReadLine(); //Email 주소 입력 if(obj.Email_Check(msg.Trim())){ //Email 주소 유효성 검사 Console.WriteLine("{0}는 유효한 전자 우편 주소입니다.", msg);

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

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

- 예) 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 ); }

- 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 = 1111111; float floatValue = 5.5F; double doubleValue = 88.888; 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" 추가

buffer.Append( " / " ); buffer.Append( booleanValue ); // "True" 추가 buffer.Append( characterValue ); // "Z" 추가 buffer.Append( integerValue ); //"3" 추가 buffer.Append( longValue ); // "1111111" 추가 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)를 제거 //수정한 문자열을 메시지박스에 출력 }

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 < 20000 ; 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();

- 예 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 < 20000 ; 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();

- 닷넷에서는 숫자들을 다양한 형식과 단위로 표현할 수 있는 많은 기능을 제공 - 형식 문자 문자열 형식 - 닷넷에서는 숫자들을 다양한 형식과 단위로 표현할 수 있는 많은 기능을 제공 - 형식 문자 - 표준 형식 문자. 서술 문자 형식 숫자 형식 문자 설명 화폐 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진법

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