본문 바로가기
수업 일지/JAVA

8일차 - [JAVA] 문자열(String) 메소드

by 쿠쿠씨 2022. 1. 7.
반응형

 

배열 예제1: 로또 번호 뽑기1

 

문제: 난수 1~45 범위의 값을 중복된 값이 없도록 6개 생성하고 배열에 저장합니다.

번호를 뽑은 후 이전에 뽑은 번호와 일치하는지를 확인하고 일치하는 번호가 있다면 다시 뽑는다.

(배열에서 중복을 제거)

9라인 int형 배열 lotto의 길이를 6으로 선언한다.

13라인 번호를 6개 뽑아야 하므로 6번 반복하는 for문을 만든다. i는 인덱스를 나타낸다.

15라인 새로운 인덱스로 검사할 때 조건을 초기화한다. (28라인에서 false로 while문 종료)

16라인 이전에 뽑은 번호와 새로 뽑은 번호가 중복될 경우 다시 뽑기 위해 while문을 사용한다.

17라인 변수 temp에 1~45범위의 난수 값을 저장한다.

21라인 j는 i 인덱스보다 앞의 인덱스를 나타낸다.

22라인 뽑은 번호(temp)를 이전에 뽑은 번호(lotto[j])와 비교해서 같은 값이 있다면

 break문으로 for-j문을 빠져나와 번호를 다시 뽑는다.

27라인 중복되지 않은 번호를 뽑으면 for-j문이 종료될 때 j값과 i값이 같게 된다.

 → isOk값이 false가 되어 while문이 종료된다.

31라인 검사를 끝낸 temp를 lotto 배열의 i 인덱스에 저장한다. 

 

 

배열 예제2: 로또 번호 뽑기2

 

문제: 확률을 반영하여 예제1을 새로운 알고리즘으로 구현합니다.

배열을 이용하여 숫자를 뽑으면 뽑은 칸의 값을 없애고 이후의 값들을 한 칸씩 앞으로 당겨온다.

8라인 int형 배열 numbers의 길이를 45로 선언한다.

12라인 for문을 이용하여 numbers 배열의 0~44 인덱스(i)에 1~45의 값(i+1)을 대입한다.

18라인 뽑은 숫자를 저장할 int형 배열 lotto의 길이를 6으로 선언한다.

19라인 k는 뽑은 숫자의 인덱스값(삭제할 위치의 인덱스 값이다.)

22라인 인덱스 범위를 1씩 줄이기 위해 k의 경계값(선택 범위)을 변경한다. (첫 번째 0~44, 두 번째 0~43,...)

 → 숫자를 뽑을 때마다 숫자를 선택하는 칸을 줄이고 숫자를 뽑는다. 

24라인 뽑은 숫자를 lotto 배열에 저장한다.

26,27라인 뽑은 위치부터 이후의 값을 한 칸 뒤의 값으로 덮어 씌운다. (배열에서 뽑은 숫자를 삭제한다.)

34라인 Arrays.sort(배열) 메소드를 이용하여 배열 값을 작은 값에서 큰 값 순서(오름차순)로 위치를 변경한다.

Arrays.sort() : 배열 값을 오름차순으로 정렬

배열 예제3

 

문제: 1~100 범위의 정수 20개로 이루어진 배열을 만들고 70 이상인 수의 인덱스와 값, 개수를 출력합니다.

10라인 int형 배열 scores의 길이를 20으로 선언한다.

14라인 scores 배열에 1~100 범위의 난수를 저장한다.

18라인 70 이상의 값을 세기위해 변수 cnt를 선언하고 초기값을 0으로 한다.

20~22라인 for문을 이용하여 70 이상인 값을 찾을 때마다 cnt를 1씩 증가시킨다.

 

배열 예제4

 

문제: 1~100 범위의 정수 20개로 이루어진 배열을 만들고 90~100, 80~89, 70~79, 60~69,

 50~59, 40~49, 40미만의 범위의 값의 분포 개수를 출력합니다.

9라인 int형 배열 scores의 길이를 20으로 선언한다.

11라인 System.currentTimeMillis() 메소드로 난수의 발생에 필요한 seed 값을 계속해서 바꾼다.

 System.currentTimeMillis() : 현재시간을 가지고 특정시간(1970.01.01.00시) 이후의 밀리초(1/1000초)를 반환

13라인 배열 scores에 1~100 범위의 난수를 저장한다.

17라인 7개 범위의 값의 개수를 셀 cntS 배열을 선언하고 길이를 7로 한다.

20~26라인 각 범위에 해당하는 값의 개수를 센다.

 

문자열 관련 메소드

 

대/소문자 변환

문자열.toUpperCase() : 문자열 내 영문자를 모두 대문자로 변경

문자열.toLowerCase() : 문자열 내 영문자를 모두 소문자로 변경

 

공백 제거

문자열.trim() : 문자열 내 공백을 제거

 

특정 문자열 포함 여부 확인

문자열1.contains(문자열2) : 문자열1 내 문자열2가 포함되었는지 여부를 true/false로 반환

 

전체 문자열 내용 비교

문자열1.equals(문자열2) : 문자열1과 문자열2가 동일한지 여부를 true/false로 반환

 

문자열 ==로 비교(주소 비교)

44라인 t1과 t2는 문자열이 다르므로 주소값이 달라 false이다.

45라인 t3은 new 연산으로 만들어진 객체를 참조하므로 주소값이 달라 false이다.

46라인 t1과 t4처럼 문자열 내용이 같으면 한 번만 메모리에 저장하므로 주소값이 같아 true이다.

 

특정 문자열의 시작 위치값 반환

 

문자열1.indexOf(문자열2) : 문자열1 내 문자열2을 찾아 시작 위치 값을 반환(없을 경우 -1 반환)

문자열1.lastIndexOf(문자열2) : 문자열1 내 마지막에 위치한 문자열2의 시작 위치 값을 반환

 

문자열의 첫 부분/마지막 부분 검사

 

문자열1.startWith(문자열2) : 문자열1이 문자열2로 시작하는지 여부를 true/false로 반환

문자열1.endWith(문자열2) : 문자열1이 문자열2로 끝나는지 여부를 true/false로 반환

 

문자열의 일부분 추출

 

문자열.substring(i) : i위치부터의 문자열을 반환

문자열.substring(i, j) : i위치부터 j위치 이전까지의 문자열을 반환(반환되는 문자열 길이: j-i)

 

 

 

문자열 치환

 

문자열1.replace(문자열2, 문자열3) : 문자열1 내 문자열2를 문자열3으로 치환

 

문자열 메소드 예제

 

문제: msg 문자열에서 "치킨"이 몇 번 나오는지 출력해봅시다.

50라인 치킨의 위치를 저장할 int형 변수 idx를 선언한다. 

55라인 temp 내 "치킨" 문자열을 찾고 시작 위치를 반환한다.

56라인 "치킨" 문자열이 없을 경우 while문을 종료한다.

57라인 "치킨" 문자열을 찾으면 cnt를 1 증가시킨다.

58라인 찾은 "치킨" 문자열 뒤의 문자열을 temp에 저장하고 다시 while문을 반복한다.

 

* 새로 배운 메소드

Arrays.sort() : 배열 값을 오름차순으로 정렬

System.currentTimeMillis() : 현재시간을 가지고 특정시간(1970.01.01.00시) 이후의 밀리초(1/1000초)를 반환

문자열.toUpperCase() : 문자열 내 영문자를 모두 대문자로 변경

문자열.toLowerCase() : 문자열 내 영문자를 모두 소문자로 변경

문자열.trim() : 문자열 내 공백을 제거

 

문자열1.contains(문자열2) : 문자열1 내 문자열2가 포함되었는지 여부를 true/false로 반환

문자열1.equals(문자열2) : 문자열1과 문자열2가 동일한지 여부를 true/false로 반환

 

문자열1.indexOf(문자열2) : 문자열1 내 문자열2을 찾아 시작 위치 값을 반환(없을 경우 -1 반환)

문자열1.lastIndexOf(문자열2) : 문자열1 내 마지막에 위치한 문자열2의 시작 위치 값을 반환

 

문자열1.startWith(문자열2) : 문자열1이 문자열2로 시작하는지 여부를 true/false로 반환

문자열1.endWith(문자열2) : 문자열1이 문자열2로 끝나는지 여부를 true/false로 반환

 

문자열.substring(i) : i위치부터의 문자열을 반환

문자열.substring(i, j) : i위치부터 j위치 이전까지의 문자열을 반환(반환되는 문자열 길이: j-i)

 

문자열1.replace(문자열2, 문자열3) : 문자열1 내 문자열2를 문자열3으로 치환

반응형

댓글