[JAVA] Day 11 - StringBuffer / StringBuilder / String 자주 사용하는 메서드 / Wrapper 클래스

sue·2023년 11월 28일

📒국비학원 [JAVA]

목록 보기
8/20
post-thumbnail

확장for문 : for(String a : b) / 하나의 데이터(b)을 가져와서 String a에게 하나씩 넣겠다
ex) for (int a : b) {
System.out.printf("%4d", su);
}

String - 클래스

시간을 비교하는 String클래스

  • StringBuffered
  • StringBuilder

String - 메서드

  • 클래스복사본.split(",") : 문자열 나누어서 배열로 변환하는 것
  • equals : string은 무조건 equals로 비교
  • equalsIgnoreCase( ) : 대소문자 구분x
  • 클래스복사본.indexOf( ) : 괄호안 내용을 index에서 찾는 것
  • 클래스복사본.lastIndextOf( ) : 괄호안 내용 뒤에서부터 찾기
  • 클래스복사본.indexOf(해당내용이 없는경우) : 일치되는 문자가 없으면 -1출력
  • 클래스복사본.replaceAll(a,b) : 치환 메서드(a를 b처럼)
  • 클래스복사본.trim( ) : 앞뒤 공백 삭제
  • 클래스복사본.replaceAll(" ",""); : 공백 지워서 치환
  • ex) char ch = "abcde".charAt(2) : index 2번째에 있는 문자 저장
  • ex) "abcdd".startsWith("abc") : 시작 문자 abc 맞나요?
  • ex) "abcde".length( ) : 문자 개수
  • ex) String s1 = "abcd"; / String s2 = "aade";
    출력시 s1.compareTo(s2); / s2.compareTo(s1);
    : ASCII값 비교

🔎 [Eclipse] - [package] - [class] 생성


📌 Note Code


  • String의 보조 클래스 [StringBuffer / StringBuilder]
    ① StringBuffer : 동기화 지원 -> (조금 느림)
    ② StringBuilder : 동기화 지원 X -> (조금 빠름)

Test1. String 클래스를 이용한 시간비교

💻 입력


public class Test1 {

	public void stringTime() {

		System.out.println("String...");

		// long start = System.currentTimeMillis();
		long start = System.nanoTime();

		String str = "A";

		for (int i = 1; i < 50000; i++) {
			str += "A";
		}

		long end = System.nanoTime();

		System.out.println("실행시간 " + (end - start) + "ms");

	}

	public void stringBuilder() {

		System.out.println("StringBuilder...");

		long start = System.nanoTime();

		StringBuilder str = new StringBuilder("A");

		for (int i = 1; i < 50000; i++) {
			str.append("A");
		}

		long end = System.nanoTime();

		System.out.println("실행시간 " + (end - start) + "ms");

	}

	public void stringBuffer() {

		System.out.println("StringBuffer...");

		long start = System.nanoTime();

		StringBuffer str = new StringBuffer("A");

		for (int i = 1; i < 50000; i++) {
			str.append("A");
		}

		long end = System.nanoTime();

		System.out.println("실행시간 " + (end - start) + "ms");

	}

	public static void main(String[] args) {
		Test1 obj = new Test1();
		obj.stringTime();
		obj.stringBuffer();
		obj.stringBuilder();

	}

}

💡 **출력**
String...
실행시간 309064600ms
StringBuffer... //Buffer가 조금 느림
실행시간 1326200ms
StringBuilder...//Builder가 조금 빠름
실행시간 1139600ms


📌 Note Code


  • StringBuffer = class -> 객체생성 가능
  • 같은 자료형끼리만 가능 (ex. int <-> Integer, char <-> Character)
  • append? 문자열 누적 (주로 StringBuffer, StringBuild에서 쓰임), ex) 서울부산 - 옆으로 쓰이는 '누적'
  • toString? 문자로 변경해서 나타내라
  • 2진수 / 6진수를 문자로 나타낼 때 : ex) System.out.println(Integer.toString(a, 16));

Test2. 같은 자료형끼리 형변환 해보기

💻 입력


public class Test2 {

	public static void main(String[] args) {
		// StringBuffer

		StringBuffer sb = new StringBuffer();

		sb.append("서울"); //append = 누적
		sb.append("부산");

		System.out.println(sb);

		String str = sb.toString(); //sb메소드에 있는 값을 문자로 변환해서 str에 대입해라  
		System.out.println(str); 

		// Integer = int
		int a = 10;
		System.out.println(a);//숫자 10
		System.out.println(Integer.toString(a)); // 문자 10
		System.out.println(Integer.toString(a, 2)); // 2진수 1010
		System.out.println(Integer.toString(a, 16)); // 16진수 a

	}

}

💡 **출력**
서울부산
서울부산
10
10
1010
a


📌 Note Code


  • ex) String ss[] = s1. split(",") = (s1의 데이터값)문자열을 나누어서 배열로 변환하는 메서드
  • 확장 for문 (자료형 a : b) = a에 b가 하나씩 입력됨
  • String은 무조건 equals로 비교 (equalsIgnoreCase -> 대소문자 비교할때)

Test3. String의 자주 사용하는 메서드

💻 입력


import java.util.Iterator;

public class Test3 {

	public static void main(String[] args) {

		String s1 = "서울, 부산, 대구";
		String ss[] = s1.split(","); // split : 나누어라

		for (String s : ss) { // 확장 for문
			System.out.print(s);
		}

		System.out.println();

		String s2 = "seoul";
		String s3 = "Seoul";

		System.out.println(s2.equals(s3)); // 내용 비교 (대문자라서 false)
		System.out.println(s2.equalsIgnoreCase(s3)); // 대소문자 구분없이 비교

		String s4 = "abc.def.hij";
		System.out.println(s4.indexOf(".")); // 인덱스에서 "."를 찾는 것. 3 출력.
		System.out.println(s4.lastIndexOf(".")); // 뒤에서부터 인덱스 찾기. 7 출력.
		System.out.println(s4.indexOf("def")); // 일치되는 문자열의 첫번째 인덱스 반환 / 4출력.
		System.out.println(s4.indexOf("x")); // 일치되는 문자가 없으면 -1 출력

		String s5 = "우리나라 대한민국 좋은나라 대한민국";
		String s6 = s5.replaceAll("대한", "大韓"); // 치환 메서드
		System.out.println(s6);

		String s7 = "  a  b  c  ";
		System.out.println(s7);
		System.out.println(s7.trim()); // 앞뒤 공백 삭제
		System.out.println(s7.replaceAll(" ", "")); // 공백을 지워서 치환

		char ch = "abcde".charAt(2); // 인덱스 2번째에 있는 c 저장
		System.out.println(ch);

		System.out.println("abcdefg".startsWith("abc")); // 시작 문자 abc 체크.
		System.out.println("abcdefg".length()); // 문자 갯수

		// 사전식 배열 (아스키값 비교)
		String s8 = "abcdefg";
		String s9 = "abcdbfg";

		System.out.println(s8.compareTo(s9)); // 3
		System.out.println(s9.compareTo(s8)); // -3

	}

}

💡 **출력**
서울 부산 대구
false
true
3
7
4
-1
우리나라 大韓민국 좋은나라 大韓민국
  a  b  c  
a  b  c
abc
c
true
7
3
-3


📌 Note Code


-BufferedReader 쓸 때 값을 받게끔 = br.readLine( );


Test4. String의 메서드를 사용해서 계산기 만들기

💻 입력

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test4 {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		System.out.print("수식 입력[ex. 3+5]: ");
		String str = br.readLine();

		str = str.replaceAll(" ", ""); // 공백 입력시 공백 제거

		String op[] = { "+", "-", "*", "/", "%" };

		for (String oper : op) {
			int pos = str.indexOf(oper); // str에서 op배열의 연산자 넘버 확인
			// System.out.println(pos);
			if (pos > -1) {
				int num1 = Integer.parseInt(str.substring(0, pos)); // 0부터 pos까지 앞자리 추출
				int num2 = Integer.parseInt(str.substring(pos + 1)); // pos 다음부터 끝까지

				int result = 0;

				char operator = str.charAt(pos);

				switch (operator) {
				case '+':
					result = num1 + num2;
					break;
				case '-':
					result = num1 - num2;
					break;
				case '*':
					result = num1 * num2;
					break;
				case '/':
					result = num1 / num2;
					break;
				case '%':
					result = num1 % num2;
					break;
				}

				// System.out.printf("%d %c %d = %d", num1, operator, num2, result);
				String s = String.format("%d %c %d = %d", num1, operator, num2, result); // 변환
				System.out.println(s);
			}
		}

	}

}

💡 **출력**
수식 입력[ex. 3+5]: 5 6+17
56 + 17 = 73


📌 Note Code


  • wrapper 클래스
    ① : 자료형을 참조형 데이터로 사용할 수 있게 한다.
    ②-1 자료형) boolean, byte, char, short, int, long, float, double
    ②-2 : 참조형 자료형) Boolean, Byte, Character, Short, Long, Float, Double

  • 같은 자료형일 때

    • Auto - Boxing: stack -> heap
    • Auto - unBoxing: heap -> stack

Test5. String의 메서드를 사용해서 계산기 만들기

💻 입력

public class Test5 {

	public static void main(String[] args) {
		int n1 = 10;
		int n2;
		Integer num1;
		Integer num2 = new Integer(20);

		num1 = n1;
		n2 = num2;
		System.out.println(n1 + ":" + num1);
		System.out.println(n2 + ":" + num2);

	}

}

💡 **출력**
10:10
20:20


📌 Note Code


  • Calendar = 시스템에서 이미 만들어져있어서 월,년,날,요일을 뽑을 수 있음
  • now.set(y,m-1,d) m-1인 이유는
  • now.get(Calendar.MONTH)+1 = index가 0부터 시작해서 ~ 11이므로
  • now.get(Calendar.DAY_OF_WEEK); = 1(일)~7(토)까지 계산,

Test6. Calendar 현재 컴퓨터 시스템의 날짜,시간을 다루는 클래스

💻 입력


import java.util.Calendar;

public class Test6 {

	public static void main(String[] args) {

		Calendar now = Calendar.getInstance();

		String yoil[] = { "일", "월", "화", "수", "목", "금", "토" };

		int y = now.get(Calendar.YEAR);
		int m = now.get(Calendar.MONTH) + 1; // 0~11이여서 +1로 달 설정 (index -0부터 시작)
		int d = now.get(Calendar.DATE);
		int w = now.get(Calendar.DAY_OF_WEEK); // 1~7까지 계산, 1=일요일

		System.out.printf("%d-%d-%d-%s", y, m, d, yoil[w - 1]); // 년, 월, 일, 주
		System.out.println();

		int startDay = now.getActualMinimum(Calendar.DATE);
		int endDay = now.getActualMaximum(Calendar.DATE);

		System.out.println("startDay: " + startDay + " endDay: " + endDay);

		System.out.printf("%tF\n", now);
		System.out.printf("%tT\n", now); // 시간출력

		System.out.printf("%1$tF %1$tT", now);

		now.set(2024, 10 - 1, 10); //index -0부터 시작

		y = now.get(Calendar.YEAR);
		m = now.get(Calendar.MONTH) + 1; // 0~11이여서 +1로 달 설정
		d = now.get(Calendar.DATE);
		w = now.get(Calendar.DAY_OF_WEEK);

		System.out.println();
		System.out.println(y + "-" + m + "-" + d + "-" + yoil[w - 1]);

	}

}

💡 **출력**
2023-11-28-화
startDay: 1 endDay: 30
2023-11-28
17:07:38
2023-11-28 17:07:38
2024-10-10-목


📌 Note Code



Test7. 디데이 날짜를 나타내는 시스템 코드를 짜여라

💻 입력


import java.util.Calendar;
import java.util.Scanner;

public class Test8 {

	public static void main(String[] args) {

		// 년도: 2020
		// 월: 5
		// 일: 20
		// 몇일후? 100일후
		// 만난날:2020년 5월 20일 x요일
		// 100일후:2020년 x월 x일 x요일

		String yoil[] = { "일", "월", "화", "수", "목", "금", "토" };

		Calendar now = Calendar.getInstance();
		Scanner sc = new Scanner(System.in);

		System.out.println("년도?");
		int y = sc.nextInt();

		System.out.println("월?");
		int m = sc.nextInt();

		System.out.println("일?");
		int d = sc.nextInt();

		now.set(y, m - 1, d); // 사용자에게 받은 날짜

		int w = now.get(Calendar.DAY_OF_WEEK);

		System.out.println("만난날: " + y + "년 " + m + "월 " + d + "일 " + yoil[w - 1] + "요일");

		System.out.println("몇일 후?");
		int dd = sc.nextInt();

		now.add(Calendar.DATE, dd); // DATE에 dd더한다

		y = now.get(Calendar.YEAR);
		m = now.get(Calendar.MONTH) + 1; // 0~11이여서 +1로 달 설정
		d = now.get(Calendar.DATE);
		w = now.get(Calendar.DAY_OF_WEEK);

		System.out.println("만난날: " + y + "년 " + m + "월 " + d + "일 " + yoil[w - 1] + "요일");

	}

}

💡 **출력**
년도?2020
월?5
일?20
만난날: 2020년 5월 20일 수요일
몇일 후?100
만난날: 2020년 8월 28일 금요일

0개의 댓글