오늘은 String, Method에 대해서 배워보겠습니다.
목차 | |
1. | String |
2. | Method |
3. | 예제 문제 |
4. | 느낀점 |
1. String
/* String 클래스 = 문자열을 다루기 위한 클래스 => 참조 변수
* String str = new String();
* String str = "홍길동"; // 일반 자료형처럼 이용가능.
* 문자열은 배열과 비슷환 형식
* "홍길동" 0 1 2 index를 가짐
* "홍길동 예쁘다" 공백, 기호 전부 하나의 텍스트로 인지
*/
String str = "홍길동~!!!!!!!!!! ";
System.out.println(str);
String str1 = new String();
str1 = "홍길순";
System.out.println(str1);
▣ length
// length : 전체 글자의 길이 (총 글자 수)
System.out.println("--length--");
System.out.println(str.length());
▣ charAt(index)
// CharAt(index) : index 번지에 있는 문자열을 반환
System.out.println("--charAt--");
System.out.println(str.charAt(0));
▣ substring
// substring(start, end) : 문자열 추출
// start는 포함 and 미포함
// end가 없으면 끝까지
System.out.println("--subString--");
System.out.println(str.substring(0,2));
System.out.println(str.substring(4));
▣ compareTo
// str1.compareTo(문자) : str1과 문자를 비교하여 앞이면 -1, 같으면 0, 뒤면 1
// 문자를 정렬할 때 사용
System.out.println("--compareTo--");
System.out.println("banna".compareTo("apple")); // a b c... 순서 => b가 a보다 뒤에 있으니 출력값은 1
System.out.println("가".compareTo("다"));
▣ concat
// concat : 이어붙이기 ( + 연산자와 같은 의미)
System.out.println("--concat--");
System.out.println("hello".concat("java"));
System.out.println("hello" + "java");
▣ equals
// equals : 두 문자가 같은지 비교(대소문자 구분) 같으면 true 다르면 false
// 참조변수에서 == 는 주소를 비교
// equals로 값을 비교
System.out.println("--equals--");
System.out.println("abc".equals("abd"));
▣ indexOf
// indexOf : 문자의 위치(index)를 찾아주는 기능. 찾는 문자가 없으면 -1 리턴
// lastIndexOF : 문자의 뒤에서부터 값을 찾음.
System.out.println("--indexOf--");
System.out.println(str.indexOf("."));
System.out.println(str.lastIndexOf("!"));
▣ contains
// contains : 해당 문자를 포함하는지 체크
System.out.println("--contains--");
System.out.println(str.contains("순"));
◈ 이메일에서 ID만 추출해보기
// 이메일에서 id만 추출
String email = "abc1234@naver.com";
int check = email.indexOf("@");
System.out.println("--id--");
System.out.println(email.substring(0,check));
▣ trim
// String method
String str = "hong gil dong ~ !!!! ";
String str1 = " ";
// trim : 불필요한 공백 제거
System.out.println("--trim--");
System.out.println(str.trim());
▣ toLowerCase, toUpperCase
// toLowerCase(), toUpperCase() : 대소문자 변환
System.out.println("--toLowerCase--");
System.out.println("AAA".toLowerCase()); // 소문자로 변환
System.out.println("aaa".toUpperCase()); // 대문자로 변환
▣ isEmpty
// isEmpty() : 객체가 비어있는지 체크 비어있으면 true / false
System.out.println("--isEmpty--");
System.out.println(str.isEmpty());
System.out.println(str1.isEmpty()); // 띄어쓰기는 값으로 인지
▣ isBlank
// isBlank()
System.out.println("--isBlank--");
System.out.println(str1.isBlank()); // 없어도 true 띄어쓰기도 true
▣ replace
// replace : 글자 치환
System.out.println("--replace--");
System.out.println(str.replace("hong", "kim").trim());
String d = "2024/07/19"; // 2024-07-19
System.out.println(d.replace("/", "-"));
▣ split
// split : 특정 값을 기준으로 나누기 => 배열로 리턴
System.out.println("--split--");
String date[] = d.split("/");
for(String s : date) {
System.out.println(s);
}
▣ Integer.parseInt
// Integer.parseInt(값) : 숫자로 변환
System.out.println(date[0] + 1); // String => 문자라 숫자로 계산하지 않고 옆에 붙임 => 20241
System.out.println(Integer.parseInt(date[0]) + 1); // 문자를 숫자로 바꿔서 계산함 => 2025
▣ isBlank
// String.valueOf() : 숫자를 문자로 변환
System.out.println("--String.valueOf()--");
int a = 12345;
String as = String.valueOf(a);
System.out.println(a+1);
System.out.println(as+1);
◈ 파일 구분하기
/* file 명은 파일이름.확장자
* 파일 이름을 이름과 확장자로 분리하여 출력
* 해당 파일의 확장자가 java이면 => java파일입니다. 라고 출력
*/
String file = "이것이자바다.java";
// split에서 .을 기준으로 나눌 시 정규 표현으로 해줘야 함 (\\. or [.])
// ex) String[] f = file.split("\\.");
// indexOf는 상관없음
String[] f = file.split("[.]");
for(String s : f) {
System.out.print(s + " ");
}
System.out.println();
if(f[1].equals("java")) {
System.out.println("자바 파일입니다.");
}
// contains : 문자 포함 유무 체크
if(f[1].contains("java")) {
System.out.println("자바 파일입니다.");
}
//substring, indexOf를 이용한 분리
int check = file.indexOf(".");
System.out.println("파일 이름: " + file.substring(0,check) + " / 확장자: " + file.substring(check+1));
System.out.println(file.substring(check + 1) + "파일입니다.");
/* 5개의 파일명이 배열로 주어졌을 때,
* 검색어를 입력하면 해당 단어를 포함하는 파일을 출력
* 만약 없다면 검색결과가 없습니다 라고 출력
*/
Scanner scan = new Scanner(System.in);
String[] file = {"이것이자바다.java", "java의 정석.java", "String.jpg", "String method.txt", "Array.java"}
System.out.println("검색어를 입력해주세요 >> ");
String s = scan.next();
int count = 0;
for(String tmp : file) {
if(tmp.contains(s)) {
System.out.println(tmp);
count ++;
}
}
if(count == 0) {
System.out.println("검색 결과가 없습니다.");
}
scan.close();
2. Method
function과 함수라고 생각하시면 됩니다.
package day05;
public class Method01 {
// 가능한 구역
// 두 정수가 주어지면, 두 정수의 합을 리턴하는 메서드
// 접근제한자 : public static
// 리턴 타입 : 정수(합) => int
// 매개변수 : 두 정수 (int num1, int num2)
// 메서드명 : sum
public static int sum(int num1, int num2) {
int sum = num1 + num2;
return sum;
}
// 두 정수가 주어지면, 두 정수의 차를 리턴하는 메서드
public static int sub(int num1, int num2) {
return num1 - num2;
}
// 두 정수가 주어지면, 두 정수의 차를 리턴하는 메서드
// 두 정수 중 큰 수에서 작은 수를 뺀 결과를 리턴
public static int sub2(int num1, int num2) {
if (num1 < num2) {
return num2 - num1;
}
return num1 - num2;
}
public static void main(String[] args) {
/* method(메서드) : 기능(함수)
* 접근제한자(제어자) 리턴타입 메서드명(매개변수) {
* 구현;
* }
*
* - 접근제한자(제어자) : 접근할 수 있는 주체의 제한범위
* - 리턴타입 : 반환값의 타입 (메서드의 자리가 끝난 후 결과로 알려주는 값의 자료형)
* - 메서드명 : 소문자로 시작
* - 매개변수 : 기능을 수행하기 위해 필요로 하는 값 (외부에서 들어와야 하는 값) 생략가능
* - 리턴타입은 생략 불가능. void (리턴할 것이 없다는 것을 의미)
*
* - 메서드의 위치
* - 클래스 안, 다른 메서드 밖
* - 메서드는 선언 순서가 의미가 없음
* - 순서대로 실행되지 않음.
* - 호출에 의해 실행됨.
*
* - return 키워드
* - 메서드에서 값을 리턴하는 역할
* - 메서드에서 return은 값을 리턴 후 종료
* - void => return 메서드 종료를 의미
*/
int r = sum(10, 20);
System.out.println(r);
int g = sub(121, 144);
System.out.println(g);
int k = sub2(121, 144);
System.out.println(k);
// 메서드의 선언 안 되는 구역
}
// 가능한 구역
}
◈ 계산기 만들기
/* 계산기 만들기
* --menu--
* 1.덧셈/2.뺄셈/3.곱셈/4.나눗셈/5.나머지/6.종료
* >> 메뉴선택
* >> 숫자1 10
* >> 숫자2 20
*/
public class MethodEx01 {
public static void solve(int num1, int A, int num2) {
char op = ' '; // 연산자
double res = 0; // 결과값
while(true) {
if (((A == 4) || (A == 5)) && num2 == 0) {
System.out.println("0으로 나눌 수는 없습니다.");
break;
} else if (A == 1) {
op = '+';
res = num1 + num2;
} else if (A == 2) {
op = '-';
res = num1 - num2;
} else if (A == 3) {
op = '*';
res = num1 * num2;
} else if (A == 4) {
op = '/';
res = num1 / (double)num2;
} else if (A == 5) {
op = '%';
res = num1 % num2;
} else if (A == 6) {
System.out.println("종료합니다.");
break;
} else {
System.out.println("잘못 입력되었습니다.");
break;
}
System.out.print("" + num1 + op + num2 + "=" + res); // ""를 안 넣을시 앞에서부터 계산을 하기에 수학적 계산이 됨(연산자도 유니코드로 계산함)
break;
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("--menu--");
System.out.println("1.덧셈/2.뺄셈/3.곱셈/4.나눗셈/5.나머지/6.종료");
System.out.println(">> 메뉴 선택(번호)");
int A = scan.nextInt();
System.out.println(">> 숫자1 입력");
int num1 = scan.nextInt();
System.out.println(">> 숫자2 입력");
int num2 = scan.nextInt();
solve(num1, A, num2);
scan.close();
}
}
◈ 구구단
//printMulti
public static void printMulti(int dan) {
for(int i=1; i<=9; i++) {
System.out.println(dan+"*"+i+"="+(dan*i));
}
}
public static void main(String[] args) {
/* 정수 (2~9) 중 하나의 수를 매개변수로 받아
* 그 단에 해당하는 구구단을 출력하는 메서드
* */
printMulti(6);
3. 예제 문제
문제 1번
/* 야구게임
* 컴퓨터가 랜덤으로 3자리의 숫자를 생성 (각 자리수 1 ~ 9까지의 수 3개)
* => 배열 저장(중복 불가능)
* 유저는 3자리 숫자를 맞추는 게임. => 직접 입력
* - 자리와 숫자가 동시에 맞으면 strike
* - 숫자만 맞으면 ball
* - 아무 숫자도 안 맞으면 out
* ex) comNum = 1 2 3
* userNum : 1 5 9 => 1s
* userNum : 1 3 9 => 1s 1b
* userNum : 4 5 6 => out
* userNum : 1 2 3 => 3s 정답~!!
*/
정답:
문제 1번
Scanner scan = new Scanner(System.in);
int comNum[] = new int[3];
int strike = 0;
int ball = 0;
for(int i = 0; i < comNum.length; i ++) {
int ran = (int)((Math.random()*9)+1);
for(int j = 0; j < comNum.length; j ++) {
if (comNum[j] == ran) { // 숫자 중복 방지
i --;
break;
}
}
comNum[i] = ran; // for문을 통해서 중복을 확인
}
for(int a : comNum) { // 컴퓨터 정답
System.out.print(a + " ");
}
System.out.println();
System.out.println("야구 게임 ~");
while (true) {
int userNum[] = new int[3]; // 새 배열 만들기
for(int i = 0; i < userNum.length; i ++) {
System.out.println();
System.out.println("숫자를 입력해주세요.(1 ~ 9 / 중복 X)");
int answer = scan.nextInt();
for(int j = 0; j < userNum.length; j ++) {
if (userNum[j] == answer) {
i --;
System.out.println("중복된 숫자입니다.");
break;
}
}
userNum[i] = answer;
}
for(int a : userNum) { // 내 꺼 정답
System.out.print(a + " ");
}
for(int i = 0; i < userNum.length; i ++) {
if (comNum[i] == userNum[i]) {
strike ++;
} else {
for(int j = 0; j < userNum.length; j ++) {
if (comNum[i] == userNum[j]) {
ball ++;
}
}
}
}
if ((strike > 0) && (ball > 0)) {
System.out.print(strike + "strike / " + ball + "ball");
} else if (strike > 0) {
System.out.print(strike + "strike");
} else if (ball > 0) {
System.out.print(ball + "ball");
} else if ((strike ==0 ) && (ball == 0)){
System.out.println("out");
}
if (strike == 3) {
System.out.println("종료!!");
break;
}
strike = 0;
ball = 0;
}
scan.close();
4. 느낀점
오늘 배운 용어들이 많아서 전부 다 이해하지 못했다. 오늘 풀었던 문제들을 다시 검토해보면서 배웠던 개념들을 복습해야하고, 특히 String에서 배운 용어들을 집중적으로 공부해야한다고 생각하였다.
'Java' 카테고리의 다른 글
Java 기초(Class) - AWS 풀스택 과정 7일차 (0) | 2024.07.23 |
---|---|
Java 기초(객체 지향 언어) - AWS 풀스택 과정 6일차 (0) | 2024.07.22 |
Java 기초(배열) - AWS 풀스택 과정 4일차 (0) | 2024.07.18 |
Java 기초(While, Do ~ While) - AWS 풀스택 과정 3일차 (0) | 2024.07.17 |
Java 기초(Switch, For) - AWS 풀스택 과정 2일차 (0) | 2024.07.16 |