Java

Java 기초(String, Method) - AWS 풀스택 과정 5일차

awspspgh 2024. 7. 19. 20:28

오늘은 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에서 배운 용어들을 집중적으로 공부해야한다고 생각하였다.