indexOf(문자)
- 해당 문자가 들어있는 위치를 알려준다.
- 문자가 없으면 -1 반환
- index는 0부터 시작
- ex) "abcde".indexOf("e") → 4
substring(index1, index2)
- CharAt은 문자 하나만 읽어내지만 substring은 문자열을 읽어 낸다.
- index1 자리부터 index 2-1 까지 반환.
- ex) "abcde".substring(1, 3) → "bc"
str.lastIndexOf(index)
- index를 반대방향부터 찾기 시작하여 특정 값이 일치하는 마지막 인덱스를 반환한다.
- 문자가 없으면 -1 반환
- ex) "abcde".lastIndex("e") → "e"
index
- index는 str.length-1 이라서 기본적으로 전체 문자열을 모두 검색한다
- String.substring(start) //문자열 start 위치부터 끝까지 문자열 자르기
- String.substring(start, end) //문자열 start위치부터 end 전까지 문자열 가져오기
- ex) String str = "ABCDEF" → A=0 B=1 C=2 D=3 E=4 F=5 의 index를 가진다.
substring, random, scanner를 이용한 문제(예제)
문제>> 신입생에게 임의의 학번을 부여하는 프로그램을 작성하라.
신입생으로부터 이름과 생년월일을 입력 받은 후 임의의 학번을 생성하고 이름, 생년월일과 학번을 출력해야 한다.
(1) 생년월일은 yyyy/mm/dd의 형태로 입력해야 한다.
yyyy는 연도를 나타낸다.
mm은 월을 나타내고 1~9월까지는 한자리 숫자이고 10~12월까지는 두 자리 숫자이다.
dd는 일을 나타내고 1~9일까지는 한자리 숫자이고 10~31일까지는 두 자리 숫자이다.
(2) 학번은 17로 시작하고 17xxxx의 형태를 취한다. 학번 xxxx는 1000부터 1009까지의 정수여야한다.
import java.util.Random;
import java.util.Scanner;
public class ClassOf {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //Scanner 클래스 변수 선언 및 초기화
System.out.print("이름을 입력하시오 : ");
String name = sc.nextLine(); //문자열 입력값 유저의 이름 대입
System.out.print("생년월일을 입력하시오 (ex 1988/7/28) : ");
String birthdate = sc.nextLine(); //문자열 입력값 유저의 생년월일 대입
String year = birthdate.substring(0,4); //연도 대입, 생년월일에 index 0~3번까지 4자리
String num = birthdate.substring(6,7); //월이 1~9월인지 10~12일인지 확인할 변수
String month = birthdate.substring(5,6); //월 대입, 월이 시작되는 index 5번으로 초기화
String days = birthdate.substring(8,9); //일 대입, 일이 시작되는 index 8번으로 초기화
if(num.equals("/")) { //num => 입력받은 생년월일의 index6번 자리가 "/"이라면
month = birthdate.substring(5,6); //월은 1~9월인 한자리 수.
if(birthdate.length() <= 8) { //월이 한자리 수 일 때 입력값의 길이가 8이하면 일도 한자리 수
days = birthdate.substring(7,8);
}else {
days = birthdate.substring(7,9); //입력값의 길이가 9이상이면 일은 두자리수이기떄문에 두자리수가 저장된다.
}
} else {
month = birthdate.substring(5,7); //입력받은 생년월일의 index 6번 자리가 "/"가 아니라면 월은 10~12월인 두자리수.
if(birthdate.length() <= 9) { //월이 두자리 수 일 때 입력값 길이가 9이하면
days = birthdate.substring(8,9); //일은 한자리수가 대입되고
}else {
days = birthdate.substring(8,10); //입력값이 10이상이면 일은 두자리수가 대입된다.
}
}
System.out.printf("이름은 %s,\n", name); // 입력받은 이름 출력
System.out.printf("%s년 %s월 %s일 ", year, month, days);
//년, 월, 일로 나눠서 놓은 변수 출력.
Random generator = new Random(); //Random 클래스 변수 선언 및 초기화
int randomnumber = generator.nextInt(10)+1000; //1000~1009까지의 정수로 임의의 학번 생성
int rest = 17; //임의의 학번 앞에 고정값
System.out.printf("학번 : %d%d", rest, randomnumber); //임의의 학번 생성
sc.close(); //스캐너 사용 후 닫아주기
}
}
월과 일을 1자리수와 2자리수로 나누는게 까다로웠던 문제였다.
역시 문제를 해결하고 완성하면 굉장히 뿌듯하다^.^
'JAVA' 카테고리의 다른 글
JAVA 클래스와 메소드 (0) | 2022.02.28 |
---|---|
JAVA 문자열비교 equals 메소드( == 연산자와 차이점) 예제/문제 (0) | 2022.02.26 |
JAVA Random 클래스 랜덤 메소드 (랜덤 전화번호 만들기) (0) | 2022.02.21 |
[JAVA] 초를 입력 받아 시, 분, 초 출력하기 (0) | 2022.02.20 |
JAVA 배열/배열선언/배열 길이 구하기/length (0) | 2022.02.12 |
댓글