24일차 - 2023.1.30

문우림·2023년 1월 30일
0

Java

목록 보기
10/23

1. substring 메소드

문자열의 일부분 추출

  • 인덱스 추출.(0부터 센다)
  • substring(2, 4) 두번째 매개변수는 -1을 해준 수의 인덱스를 추출한다.
    ex)4 ➡ 3번째 , 6 ➡ 5번째
public class Main {

	public static void main(String[] args) {
		String str = "abcdefg";
		System.out.println(str.substring(2));
		System.out.println(str.substring(2, 4));
	}

}
  • str.substring(2) 와 str.substring(2, 4) 는 함수 오버로딩.
  • str.substring(2)는 2번째 이후의 문자열 / str.substring(2, 4) 2번째 부터 3번째 까지의 문자열

2. length 메소드

戻り値:このオブジェクトのよって表される文字のシーケンスの長さ
문자열의 길이를 표현하는 메소드

  • 반환값으로 문자열의 길이를 int형의 값으로 출력할 수 있다.

  • 문자열의 글자 수와 같은 수의 값이 나오는 경우가 많다.

public class Jsample {

	public static void main(String[] args) {
		String msg1 = "Hello";
		String msg2 = "東京都港区赤坂";

		System.out.println(msg1 + "の長さは" + msg1.length());
		System.out.println(msg2 + "の長さは" + msg2.length());
	}

}

3. concat 메소드

  • 문자열끼리 결합할 때 사용하고, 결합된 문자열은 새로운 문자열으로 메모리에 올린다.

  • 인스턴스를 새로 생성한다.

  • 문자열을 하나 준비하고, 결합하고 싶은 문자열을 매개변수로 주면서 결합.
    원래 문자열.concat(결합하고 싶은 문자열);
    String 결합한 문자열 = 원래 문자열.concat(결합하고 싶은 문자열);

public class StringConcat {

	public static void main(String[] args) {
		String str1 = "Coffee";
		String str2 = "Bread";

		String str3 = str1.concat(str2);
		System.out.println(str3);

		String str4 = "Fresh".concat(str3);
		System.out.println(str4);

	}

}

4. charAt 메소드

  • 문자열의 n번째의 문자열을 추출하는 메소드
  • 문자열은 첫 번째 글자를 0부터 센다.
public class SampleCharAt {

	public static void main(String[] args) {
		String str = "Hello.Java World.Stay Strong";
		char ch1 = str.charAt(0);
		char ch2 = str.charAt(15);
		char ch3 = str.charAt(20);
		char ch4 = str.charAt(25);

		System.out.println("첫 번째 문자: " + ch1);
		System.out.println("열 다섯번째 문자: " + ch2);
		System.out.println("스무번째 문자: " + ch3);
		System.out.println("스물 다섯번째 문자: " + ch4);
	}

}

5. valueOf 메소드

  • 기본 자료형 값 ➡ 문자열 인스턴스로 치환
  • 매개 변수로 지정한 다양한 데이터 형의 값을 String형 문자열로 반환
public class SampleValueOf {

	public static void main(String[] args) {
		// short형 > String
		short sh = 100;
		String strsh = String.valueOf(sh);
		System.out.println(strsh);

		int num = 100;
		String strnum = String.valueOf(num);
		System.out.println(strnum);

		long lon = 100;
		String strlon = String.valueOf(lon);
		System.out.println(strlon);

		float fl = 100;
		String strfl = String.valueOf(fl);
		System.out.println(strfl);

		double db = 100;
		String strdb = String.valueOf(db);
		System.out.println(strdb);
	}

}

6. compareTo / compareToIngnoreCase 메소드

6-1. compareTo( )

문자열 또는 숫자의 값을 비교하여, 비교한 값이 어느 쪽이 크거나 같거나를 비교할 수 있다.
변수1.compareTo(변수2)

숫자의 비교
단순히 크다(1), 같다(0), 작다(-1)의 관한 결과값을 반환.

문자열 비교
같은 문자열의 경우는 숫자와 동일하게 0을 리턴
문자열의 유니코드의 사전적으로 비교.

6-2. compareToIngnoreCase( )

public class Main {

	public static void main(String[] args) {
		String str1 = "Lexicographically";
		String str2 = "lexicographically";
		int cmp;

		if (str1.equals(str2))
			System.out.println("두 문자열은 같습니다.");
		else {
			System.out.println("두 문자열은 다릅니다.");
			비교는 두 값의 차이(뺄셈)
			cmp = str1.compareTo(str2); //cmp=제일 처음 다른 글자의 유니코드로 비교
			if (cmp == 0)
				System.out.println("두 문자열은 일치합니다");
			else if (cmp < 0)
				System.out.println("사전 앞에 위치하는 문자: " + str1);
			else
				System.out.println("사전 뒤에 위치하는 문자: " + str2);
                
		// 음수=대문자인 문자열을 출력 양수=소문자인 문자열을 출력
        
			if (str1.compareToIgnoreCase(str2) == 0)
				System.out.println("두 문자는 같습니다");
			else
				System.out.println("두 문자는 다릅니다.");
		}
	}

}

7. StringBuilder

  • 문자열을 바로 만들어 메모리에 올리지 않는다.
  • 문자열을 만들기 위한 공간을 제공하고, 요청하면 문자열을 만들어 메모리에 올림.
  • StringBuilder는 객체 생성으로만 만들 수 있다.
    (String처럼 쌍따옴표로 하는 static 선언은 불가능)
package com.global.ex2;

public class Main {

	public static void main(String[] args) {
		//문자열 "123"이 저장된 인스턴스의 생성
		StringBuilder stbuf = new StringBuilder("123");

		stbuf.append(45678); // 문자열 덧 붙이기
		System.out.println(stbuf.toString());
		
		stbuf.delete(0, 1); // 문자열 일부 삭제
		System.out.println(stbuf.toString());
		
		stbuf.replace(0, 3, "AB"); // 문자열 일부 교체
		System.out.println(stbuf.toString());
		
		stbuf.reverse(); // 문다열 내용 뒤집기
		System.out.println(stbuf.toString());

		String sub = stbuf.substring(2, 4); // 일부만 문자열로 반환
		System.out.println(sub);
	}

}

[결과]
12345678
2345678
AB5678
8765BA
65

📌StringBuilder클래스가 제공하는 메소드

  • append( ) = 문자열 덧붙이기
  • delete( ) = 문자열 일부 삭제
  • replace( ) = 문자열 일부 교체
  • reverse( ) = 문자열 내용 뒤집기

String 과 StringBuilder 의 차이
String은 선언하면 무조건 메모리에 올라간다.
StringBuilder는 Heap영역에 있는 String constant pool에 저장된다.

안 좋은 예

String str = "0";
		
		for(int i = 0; i <= 1000; i++) {
			str = str + i;
			System.out.println(str);
		}

1000개 인스턴스가 메모리에 올라가서 메모리 낭비

좋은 예

StringBuilder stbf = new StringBuilder("0");
		
		for(int i = 0; i <= 1000; i++) {
			System.out.println(stbf);
		}

인스턴스에 저장된 값이 갱신돼서 메모리 절약 할 수 있음.

7-1. 아래의 연산과정에서 호출되는 함수(원리)를 써서 표현해 보세요.

String str = "age: " + 17;
❌String str = "age: " .concat(17);
⭕️String str = "age: " .concat(String.valueOf(17));

  • concat메소드는 문자열, String 인스턴스만 인자로 전달 가능.
  • valueOf 메소드를 사용해서

8. 콘솔 출력

8-1. Scanner 클래스

Scanner 클래스의 인스턴스 생성은 데이터를 뽑아 올 대상과의 연결을 의미한다.

  • int형 입력(nextInt();) : 공백, 띄어쓰기를 기준으로 int 자료형인 숫자를 담는 함수
import java.util.Scanner;

public class ScnnerTest {

	public static void main(String[] args) {
		String source = "1 3 5"; // 공백 기준으로 num1, num2, num3에 뿌린다.
		Scanner sc = new Scanner(source);
		int num1 = sc.nextInt();
		int num2 = sc.nextInt();
		int num3 = sc.nextInt();

		int sum = num1 + num2 + num3;
		System.out.printf("%d + %d + %d = %d \n", num1, num2, num3, sum);
	}

}
  • 문자열 입력(nextline();)
import java.util.Scanner;

public class ScannetTest2 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		System.out.println("문자열 입력:");
		String str1 = sc.nextLine();

		System.out.println("문자열 입력:");
		String str2 = sc.nextLine();

		System.out.println(str1);
		System.out.println(str2);

	}

}

8-1. System클래스 in (console창에서 입력)

  • System.in : 사용자가 직접 키보드로 입력할 수 있도록 한다.

국어, 영어, 수학의 점수와 총점을 Scanner, System.in을 사용해서 출력하는 예제

import java.util.Scanner;

public class ScnnerTest {

	public static void main(String[] args) {
	
		Scanner sc = new Scanner(System.in); //Scanner : 입력받는 클래스
		//System(클래스 이름).(.은 클래스안에 있는 변수/함수)in = 키보드로 입력한다	>>	>
		System.out.println("국어:");
		int num1 = sc.nextInt();
		
		System.out.println("영어:");
		int num2 = sc.nextInt();
		
		System.out.println("수학:");
		int num3 = sc.nextInt();

		int sum = num1 + num2 + num3;
		
		System.out.println("합계:");
		System.out.println(num1 + "+" + num2 + "+" + num3 + "=" + sum);
	}

}

Grade클래스를 만들고 국어, 영어, 수학의 점수를 Scanner를 사용해 Console창에서 입력, 그리고 총점과 평균, 학점을 출력.

import java.util.Scanner;

class Grade {
	private int kor, eng, math;

	public Grade(int kor, int eng, int math) {
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}

	public int getSum() {
		return (kor + eng + math);
	}

	public double getAvg() {
		return (getSum() / 3.0);
	}

	public char getGrade() {
		char grade = '가';

		if (getAvg() > 90) {
			grade = '수';
		} else if (getAvg() > 80) {
			grade = '우';
		} else if (getAvg() > 70) {
			grade = '미';
		} else if (getAvg() > 60) {
			grade = '양';
		} else {
			grade = '가';
		}
		return grade;
	}

}

public class ScannerTest3 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		System.out.println("국어: ");
		int num1 = sc.nextInt();

		System.out.println("영어: ");
		int num2 = sc.nextInt();

		System.out.println("수학: ");
		int num3 = sc.nextInt();

		Grade grade = new Grade(num1, num2, num3);

		System.out.println("총점: " + grade.getSum());
		System.out.println("평균: " + grade.getAvg());
		System.out.println("학점: " + grade.getGrade());

	}

}

0개의 댓글