본문 바로가기
Programming/JAVA(eclipse)

java 11일차 _ 01. 유틸리티 클래스( String 클래스 )

by yoon9i 2024. 3. 22.

0. fianl ( 마지막 )
변수에 final 사용: 상수 ( 값 수정 불가 )
메서드에 final 및 static 사용: 오버라이딩 ( overriding; 재정의 ) 불가. 
클래스에 final 사용: 상속불가( extends 불가 )

1. 유틸리티 클래스 ( API )
1) java.lang.String 클래스

가. 사용방법 2가지
- 리터럴 이용
String s= "hello";
String ss = "hello";
==> 동일한 문자열은 한번만 생성됨.
s == ss 일때 true 반환됨

- new 이용
String s2 = new String("hello");
String ss2 = new String("hello");
==> new 할때마다 매번 생성됨.
s==ss2 일때 false 반환됨.

문자열 값을 비교할때는 반드시 equals 메서드를 사용해야 된다.

나. 메서드 정리


다. 특징
- String 는 한번 생성하면 변경 안됨. 메서드를 적용하면 새로운 문자열이
  생성됨. 문자열 값을 변경하는 작업이 빈번하다면 String 사용은 지양해야
  된다.

 

package exam19_Util;

public class Util01_StringTest {

	public static void main(String[] args) {

		// 1. 리터럴 이용하는 방법 ( * )
		// ==> "hello" 문자열은 method area 에 저장, 동일한 문자열은 한번만 생성됨.
		String s = "hello";
		String s2 = "hello";
		System.out.println(s);
		System.out.println(s2);
		System.out.println("주소값 비교: " + ( s == s2 )); // >>> true
		System.out.println("문자열 실제값 비교: " + s.equals(s2)); // >>> true
		
		System.out.println();
		
		// 2. new 이용하는 방법
		// ==> heap 에 저장, new 했기 때문에 동일한 문자열도 매번 생성됨.
		String x = new String("hello");
		String x2 = new String("hello");
		System.out.println(x);
		System.out.println(x2);
		System.out.println("주소값 비교: " + ( x == x2 )); // >>> false
		System.out.println("문자열 실제값 비교: " + x.equals(x2)); // >>> true
		
		// 중요: 문자열 값을 비교할때는 반드시 equals 메서드를 사용해야 된다. 
	}

}
package exam19_Util;

import java.util.Arrays;

public class Util01_StringTest2_메서드 {

	public static void main(String[] args) {
		
		// 1. 생성
		String s = "helLO";
		String s2 = "     helLO     ";
		
		// 2. 인스턴스 메서드 ( s.메서드 형식 )
		int n = s.length();
		System.out.println("1. 문자열길이: " + n); // >>> 5
		
		char c = s.charAt(0);
		System.out.println("2. 특정문자조회: " + c); // >>> h
		
		// 특정부분의 시작값 ~ 끝
		System.out.println("3. 부분열: " + s.substring(1)); // >>> elLO
		// subString( beginIndex, endIndex ) : endIndex 는 문자열의 끝은 포함안됨.
		// endIndex - 1 까지만 출력
		System.out.println("3-1. 부분열: " + s.substring(1, 4)); // >>> elL
		
		// indexOf() - 오버로딩메서드
		System.out.println("4. 특정문자위치: " + s.indexOf("e")); // >>> 1
		// 일치하는 문자가 없다면 -1 반환
		System.out.println("4-1. 특정문자위치: " + s.indexOf("E")); // >>> -1
		
		System.out.println("5. 대문자: " + s.toUpperCase()); // >>> HELLO
		System.out.println("6. 소문자: " + s.toLowerCase()); // >>> hello
		
		System.out.println("7. 문자열 값비교: " + s.equals("helLO")); // >>> true
		// .equals() 는 대소문자를 구별한다.
		System.out.println("7-1. 문자열 값비교: " + s.equals("hello")); // >>> false
		// .equalsIgnoreCase() 는 대소문자 구분을 무시하고 equals 인지 확인
		System.out.println("7-2. 문자열 값비교(대소문자무시): " + s.equalsIgnoreCase("hello")); // >>> true
		
		System.out.println("8. 문자열 포함여부: "+ s.contains("el")); // >>> true
		System.out.println("8-1. 문자열 포함여부: "+ s.contains("xe")); // >>> false
		
		// .replace(기존값, 바꿀값)
		System.out.println("9. 문자열치환: " + s.replace("h", "H")); // >>> HelLO	
		System.out.println("원본문자열: " + s); 
		// 위에서 변환을 많이 했지만 원본은 변경이 안됨.
		// String 는 한번 생성하면 변경 안됨.
		// 메서드를 적용하면 새로운 문자열이 생성됨.
		
		
		String x = s2.trim(); // 공백제거
		System.out.println("10. 공백제거 전: " + s2); // >>> '      helLO     '
		System.out.println("10-1. 공백제거 전 길이: " + s2.length()); // >>> 15 (공백포함)
		System.out.println("10-2. 공백제거 후: " + x); // >>> helLO
		System.out.println("10-3(1). 공백제거 후 길이: " + x.length()); // >>> 5
		System.out.println("10-3(2). 공백제거 후 길이(메서드체인) : " + s2.trim().length()); // >>> 5
		
		System.out.println("11. 문자열 연결: " + s.concat("!!!")); // >>> helLO!!!
		
		char [] chr = s.toCharArray();
		System.out.println("12. 문자열을 char [] 반환: " + Arrays.toString(chr)); // >>> [h, e, l, L, O]
		
		String x2 = "홍길동/이순신/유관순"; // 홍길동,이순신,유관순 도 가능(구분자는 아무거나 상관없음)
		String [] x3 = x2.split("/");
		System.out.println("13. 구분자로 분리해서 배열로 반환: " + Arrays.toString(x3)); // >>> [홍길동, 이순신, 유관순]
		System.out.println();
		
		// 3. static 메서드 ( String.메서드 형식 )
		// "10" ---> 10
		int k = Integer.parseInt("10");
		System.out.println(k+20); // 연산이 가능해짐.
		
		// 비문자열 ---> 문자열
		String x4 = String.valueOf(true);
		String x5 = String.valueOf(100);
		String x6 = String.valueOf(3.14);
		String x7 = String.valueOf(new char[] { 'A', 'B', 'C' });
		System.out.println(x4); // "true"
		System.out.println(x5); // "100"
		System.out.println(x6); // "3.14"
		System.out.println(x7); // "ABC"
		
		// 배열 사용 1
		char [] y = new char[3];
		y[0] = 'A';
		y[1] = 'B';
		y[2] = 'C';
		
		String yy = String.valueOf(y);
		
		// 배열 사용 2
		char [] y2 = { 'A', 'B', 'C' };
		String yy2 = String.valueOf(y2);
		
		//배열 사용 3
		String yy3 = String.valueOf(new char[] { 'A', 'B', 'C' });
		
	}// end main
}// end class