프로그레밍에서 문자열을 다루는 것은 byte 와 char
본래 문자열(String) 은 char의 배열(array)을 내장하고 있다.
. 정직 데이터 타입이 아니였다
자바에서는 문자열을 다루기 위한 String 이라는 class를 만들게 한다.
String은 클래스이기 때문에 여러가지 기능들이 있다
문자열의 공백을 없애거나, 다른 문자로 치환 할 수 있다.
intdexOf : 문자열에서 특정 부분 문자열의 위치를 찾기 위한 메서드
이 메서드는 문자열 내에서 지정된 부분 문자열의 첫 번째 발견 위치를 반환하며, 해당 부분 문자열이 없으면 -1을 반환합니다.
if문 : 주어진 조건이 참(True)인 경우에만 특정 코드 블록이 실행
intResult 를 0으로 기준을 두고
While 문을 -1보다 int result 가 클때 int result의 값이 문자열 내 지정된 c를 반환하는 특정 부분 문자열의 위치를 찾기 위한 매서드 indexOf값 으로 지정한다
이후 c를 반환 받는 if문이 -1보다 intresult가 클때(주어진 조건이 참)는 c의 위치를 intResult로 반환
-1보다 작을때는 실행은 값이 도출해 낸다.
현재 index는 방금 찾은 문자열의 위치이므로, 다음 탐색을 위해 1을 증가시킨다.
이후 c를 반환 받는 if문이 c의 위치를 inrResult로 반환 , 값이 -1보다 intresult가 클때(주어진 조건이 참) 는 계속하여 반복 실행 하고 -1일때는(주어진 조건이 참이 아닐때) 값을 도출해낸다.
intdexOf : 문자열에서 특정 부분 문자열의 위치를 찾기 위한 메서드
이 메서드는 문자열 내에서 지정된 부분 문자열의 첫 번째 발견 위치를 반환하며, 해당 부분 문자열이 없으면 -1을 반환합니다.
if문 : 주어진 조건이 참(True)인 경우에만 특정 코드 블록이 실행
string 은 용량이 고정되기 때문에 문자열 추가 시 객체를 계속 생성 한다.
string str = "문자열을"
-> 이런 무분별한 객체의 남발을 방지하기 위해서 사용
StirngBuffer 와 StiringBuilder는 용량이 변화하므로 새로운 객체를 생성 하지 않는다
Buffersms 다수 유저 동시 접근을 허용 하지 않음
builder는 허용함
노래방에 문을 열어놓고 사용하는거랑 닫아 놓고 사용한다는 예시
에러(Error) : 문법이나 메모리 사용 문제로 실행에 문제가 생겨 발생하는 오류 (코딩잘못) 빨간줄
문법적으로 잘못된 경우
예외(Exception) : 사용자의 오 조작이나 외부 문제로 발생하는 오류 (이렇게 사용했을 경우 특정한 상황에 에러가 날 수 있다.)
예외는 일반 예외와 실행 예외로 분리된다.
일반 예외 :
이대로 실행하면 문제 생길게 예상이 됨
실행 예외 :
실행해 봐야 한다. (직접 실행해 보고 처리 해야 한다)
일반 예외는 필요하다고 판단하면 자동으로 예외처리를 해준다
그래서 우리는 주로 실행 예외를 신경쓰자
NullpointException : 객체가 없는 상태에서 객체를 사용할경우
ArrayIndexOutodBoundException : 배열 인덱스 범위를 초과하여 사용할 경우
NumberFormatException : 숫자 변환 시 문자가 포함되어 있는 경우
ClassCastException : 매개 값으로 받은 타입의 종류를 알 수 없는 경우
-Exception 은 불가피한 외부 문제로 발생하므로 프로그램이 정지 하지 않도록 해야 함
-그래서 예외처리를 통해 exception 발생 시에도 프로그램이 정상 작동 하도록 함
※ 예외처리에는 두 가지 방법을 사용
Try-catch
throws
해당 업무를 시킨 method 에 전가 한다.
-try-catch try 영역 안에서 exception 발생 시 eatch 를 실행하는 구문
-Finally는 exception 발생시에도 꼭 실해할 code를 작성해준다
try 문제가 생길 것 같을 때 -> 예외발생 가능 코드
catch 문제 해결 시 -> 예외 발생 시 실행 코드
Finally 문제 발생 시에도 꼭 실행한다 -> 항상 실행
※ Exception 이 꼭 하나 발생하라는 법은 없다
-이 경우 Exception에 맞는 catch를 만들어 주거나 1.7JDK에서 지원하는 Multi eatch 사용
-> 여러 예외를 한번 처리 가능
-> 예외 별로 각기 다른 처리는 어렵다.
잘 사용 하진 않음
-다형성(다양한 객체들을 동일한 인터페이스로 다룰수 있는 기능)을 사용한 Exception 처리 주로 사용
-> 때문에 모든 예외를 받아 내고 싶을 경우는 ※Exception 하나로 처리 가능하다
Throws 는 작업을 지시한 메서드 에게 처리를 넘기는 것이다.
main() 에서도 throws를 할 경우 JVM 에서 처리 하게 된다. ( 예외 내용 출력 );
-> 안한 것과 다름이 없다.
System.out.println(e.toString()); -> 예외 발생에 대한 간단한 메세지를 알려줌
e.printStackTrace(); // 예외에 대한 상세 정보
우리는 기존 예외 이외에도 새로운 예외를 만들 수 있다
-> 단. 하나의 규칙이 있다면 반드시 Exception (일반예외) | RuntimeException (실행예외) 클래스를 상속 받아야 한다.
-> 또한 테스트를 위해서 강제로 특정 예외를 발생 시킬 수 있다.
<요약>
Collection Framework 는 Collection interface 를 최상위 로 하는 자료구조 interface 이다.
※Arraylist
※HashMap
Collection Framework 다양한 자료 구조를 가지고 있다
또한 초기 선언 시 크기를 지정하지 않아 유연한 사용이 가능하다.
list 넣는대로 들어간다
map 문자로 들어간다
set 중복을 넣고 싶을 때
데이터 추가, 삭제, 검색 방법은 거의 비슷하다.
같은 인터페이스를 구현 받고 있기 때문에 사용방법이 비슷하다
※ 인터페이스 구현 시 장점은?
-> 필수 method 를 강제 할 수 있다.
<요약>
Collection framework 자료구조 최상위 interface 이다.
크게 list, set, map interface 로 나눌 수 있다.
이들은 선언 시 크기를 지정하지 않는다.(크기가 거의 무한하다.)
각 interface 를 구현 받은 class 들의 사용법은 비슷하다.
안에 있는 내용을 전부 보여준다.
※ <>를 제너릭 이라고 한다.
※ <>안에 데이터 타입을 넣어서, 해당 클래스 안에서 어떤 데이터를 사용하는지 명시 해 준다
※ 단. 데이터 타입은 반드시 클래스 형태로 들어가야한다. int(X), Integer(O)
★ 이런식으로도 선언이 된다 왜? 다형성 때문에
List<Integer> list2 = new ArrayList<Integer>();
크기는 length 가 아닌 size()로 확인 한다.
값을 가져 올때는 get(index)를 사용한다.
Array List 와 Linked list의 속도 체크를 어떤 방식으로 할 것인가?
a라는 b라는 친구 중에 달리기가 빠른친구 찾아
한명씩 달리는데 시간을 어캐 체크 (1.타이머 2.도착한 시간 - 출발한 시간)
<요약>
Array List 는 array 와 비슷하지만 훨씬 편리하다.
다만 중간 index 에 입력과 삭제가 잦은 경우 불리하다.
Linked List 는 는 반대로 위 경우에 유리하다.
※ set 은 중복을 허용하지 않고 순서도 없다.
※ 검색 할 수 없으며 하나씩 꺼내는 iterator를 제공
※ 향상된 for문을 통해서 더 쉽게 꺼내 올 수 있다.
-String 순수 데이터 타입이 아니다. 문자를 다룰때 쓰는 것
무얼 봤으때 class를 알아보는 이유
앞 글자가 대문자일때
문자열을 생성할 때 다양한 방법으로 사용한데 무엇떄문에
생성자 오버로드를 사용한다.
문자열 비교시 이퀄스를 사용하는 이유
-각 각 다른 개체이기떄문에 이퀄스라는 매소드를 사용
예외와 오류의 정의
일반예외와 실행예외의 정의
실행예외의 발생하는 원인 4가지
ArrtIndexOutofBoundsException
NumberFormatException
예외가 발생 했을때 처리하기 위한 방법
예외처리의 두가지 차이점
try에 어떤 내용이 들어가는지
try - catch예외가 여러개가 발생 할때 어떻게 처리 하나
Collection Framework 이란?
interface를 상속 받은 인원들
list들의 사용법이 비슷한 이유?
Array List , Linked List 둘의 차이점
프로그래밍에서 문자열을 다루는 것은
본래 문자열은 무엇을 내장 하고 있나
String의 사용법
StringBuffer 와 StringBuilder을 사용 하는 이유
이 둘의 차이점
-다수 유저 동시 접근을 허용하는 buffer와 허용하지 않은 builder 의 차이점이 있다.
예외와 에러의 차이점
예외의 종류
예외 처리의 키워드
-Handing
예외처리를 사용하는 이유
예외 처리의 두가지 방법과 의미
Exception이 다중으로 발생할 경우 어떻게 진행 할 건가
질문지
-String 순수 데이터 타입이 아니다. 문자를 다룰때 쓰는 것
무얼 봤으때 class로 알아보는 이유
앞 글자가 대문자일때
문자열을 생성할 때 다양한 방법으로 사용한데 무엇떄문에
생성자 오버로드를 사용한다.
문자열 비교시 이퀄스를 사용하는 이유
-각 각 다른 개체이기떄문에 이퀄스라는 매소드를 사용
예외와 오류의 정의
일반예외와 실행예외의 정의
실행예외의 발생하는 원인 4가지
ArrtIndexOutofBoundsException
NumberFormatException
예외가 발생 했을때 처리하기 위한 방법
예외처리의 두가지 차이점
try에 어떤 내용이 들어가는지
try - catch예외가 여러개가 발생 할때 어떻게 처리 하나
Collection Framework 이란?
interface를 상속 받은 인원들
list들의 사용법이 비슷한 이유?
Array List , Linked List 둘의 차이점
intResult = 0;
while(intResult>-1){
intResult = str.indexOf("c", intResult);
if(intResult>-1) {
System.out.println("c 의 위치 : "+intResult);
intResult++;
}
}
intdexOf : 문자열에서 특정 부분 문자열의 위치를 찾기 위한 메서드
이 메서드는 문자열 내에서 지정된 부분 문자열의 첫 번째 발견 위치를 반환하며, 해당 부분 문자열이 없으면 -1을 반환합니다.
if문 : 주어진 조건이 참(True)인 경우에만 특정 코드 블록이 실행
intResult 를 0으로 기준을 두고
While 문을 -1보다 int result 가 클때 int result의 값이 문자열 내 지정된 c를 반환하는 특정 부분 문자열의 위치를 찾기 위한 매서드 indexOf값 으로 지정한다
이후 c를 반환 받는 if문이 -1보다 intresult가 클때(주어진 조건이 참)는 c의 위치를 intResult로 반환
-1보다 작을때는 실행은 값이 도출해 낸다.
현재 index는 방금 찾은 문자열의 위치이므로, 다음 탐색을 위해 1을 증가시킨다.
이후 c를 반환 받는 if문이 c의 위치를 inrResult로 반환 , 값이 -1보다 intresult가 클때(주어진 조건이 참) 는 계속하여 반복 실행 하고 -1일때는(주어진 조건이 참이 아닐때) 값을 도출해낸다.
// 요구사항 : 주어진 문자열 str에서 문자 'c'의 위치를 모두 출력하는 기능을 구현한다
// 자바의 indexOf 함수는 탐색하는 문자의 위치를 하나(맨처음)만 반환하기 때문에 모두 출력하는 기능을 구현해내야 한다
// 그래서 반복문안에 indexOf 함수를 넣어 모두 출력하는 기능을 구현했다
int index = 0;
// 문자열을 탐색할 시작 위치를 지정하는 변수이다
String str = "abcdefg".repeat(5);
while (index > -1) {
// 이 반복문은 문자열의 위치를 더이상 찾지 못하면 반복을 종료한다
index = str.indexOf("c", index);
// indexOf 함수는 찾을 문자와 찾을 시작 위치를 입력받아 찾은 문자의 위치를 반환한다
// 반환된 값을 기억하기 위해 index에 저장한다.
// 만약 문자를 더 이상 찾지 못해 index 값이 -1이라면,
// 다음 탐색을 위해 1을 증가되어 값이 0이 되어버린다
// 값이 0이 되어버리면 while 문이 무한반복이 되기에 if문을 사용해 반복문을 탈출한다
if (index == -1) {
break;
}
// 'c'를 찾은 위치를 출력한다.
System.out.println("c의 위치: " + index);
// 현재 index는 방금 찾은 문자열의 위치이므로, 다음 탐색을 위해 1을 증가시킨다.
index++;