JAVA/기본 개념

[JAVA] 기본 API | String 클래스 관련 함수

soyeonisgood 2022. 7. 23. 01:12

java.lang.String

  • 문자열과 관련된 작업 위한 메소드 제공
  • 자바의 모든 문자열 리터널은 String 클래스의 인스턴스로 구성
  • final 클래스이므로 상속X. 하위 클래스X.
  • String 인스턴스는 내용 불변. 초기화할 때마다 매번 새로운 객체로 생성됨.
  • String 인스턴스의 문자열이 변경되면 새로운 인스턴스로 생성, 기존 인스턴스는 GC대상.
  • '+' 연산자 이용해서 결합 가능. 이럴 경우에도 새로운 String 인스턴스로 생성됨
  • '==' 연산자는 문자열 비교가 아닌, 참조 영역 비교.

 

String 관련 예제

equals()

  • 객체에서 ==는 값이 아닌 주소를 비교
  • Object의 equals(): 주소 비료
  • String의 equals(): Object의 equals()를 override하여 문자열 값 자체를 비교.

equalsIgnoreCase()

  • 비교할 문자열의 대소문자 구분하지 않음.
String s1 = "seoul";
String s2 = new String("seoul");
System.out.println(s1.equals(s2)); // true. 문자열 자체를 비교

tring s1 = "seoul korea";
System.out.println(s1.equalsIgnoreCase("seoul korea"));
				// true. 대소문자 구분 안함

substring()

  • substring(s, e): s 인덱스에서 e-1 인덱스까지의 문자열 추출
String s1 = "seoul korea";
String s2;

s2 = s1.substring(6, 9);
System.out.println(s2); // kor

s2 = s1.substring(6); // 6인덱스에서 끝까지
System.out.println(s2); // korea

startWith()

  • 특정 문자열로 시작하는지

endsWith()

  • 특정 문자열로 끝나는지
String s1 = "seoul korea";

System.out.println(s1.startsWith("seoul")); //true

System.out.println(s1.endsWith("korea")); // true

compareTo()

  • 문자열은 >,<,= = 으로 비교 불가
  • 문자열을 사전식으로 비교하여 차이를 반환
System.out.println(s1.compareTo("seoul corea"));
	// 'k'-'c':8
	// aabaaaaaa < aba

indexOf()

  • 특정 문자나 문자열이 몇 번째 인덱스에 존재하는지. 없으면 -1 반환.

lastIndexOf()

  • 뒤에서부터 검색.

charAt(6)

  • 문자열에서 특정 위치(6)의 한 문자 추출
String s1 = "seoul korea";
String s2;
int n;

n = s1.indexOf("seo");
System.out.println(n);  // 0
		
n = s1.indexOf("KOR");
System.out.println(n);  // -1
		
n = s1.indexOf("ko");
System.out.println(n); // 6
		
n = s1.indexOf("o");
System.out.println(n); // 2
		
n = s1.indexOf("o", 3); // 3인덱스(u) 부터 검색
System.out.println(n); // 7

n = s1.lastIndexOf("o"); // 뒤에서부터 검색
System.out.println(n); // 7

indexOf()를 이용하여 파일의 확장자만 추출

s1 = test.jpg;

s2 = s1.substring(s1.lastIndexOf(".")+1);
System.out.println(s2); //jpg

replace()

  • 문자열 변경. 정규식 사용 불가

replcaeAll()

  • 문자열 변경. 정규식 사용 가능.
s1="우리나라 대한민국 대한민국 만세";
s2 = s1.replace("대한", "大韓"); // 모든 대한을 한문으로 변경. 정규식 사용 불가
System.out.println(s2);
		
s1="우리나라 대한민국 대한민국 만세";
s2 = s1.replaceAll("대한", "大韓"); // 모든 대한을 한문으로 변경. 정규식 사용 가능
System.out.println(s2);
		
s1="우리 123 나라 456 대한";
// 정규식 패턴-> \\d:숫자, \\s:공백(엔터,탭 포함), |:또는
s2 = s1.replaceAll("\\d", ""); // 숫자 제거
System.out.println(s2);
		
// [0-9]: 숫자
s2 = s1.replaceAll("[2-5]", ""); // 2~5 사이의 숫자 제거
System.out.println(s2);
		
s1 = "우리12나라 ab대한XY민국 한국"; // 
s2 = s1.replaceAll("[0-9A-Za-z]", ""); //영문자(대소문자), 숫자 제거
System.out.println(s2);
		
s2 = s1.replaceAll("\\w", ""); // \\w: 영숫자
System.out.println(s2);
		
s2 = s1.replaceAll("\\W", ""); // \\W: 영숫자 제외
System.out.println(s2);
		
// 영문자, 숫자, 대한 제거
s2 = s1.replaceAll("\\w|대한",""); // 우리나라 민국 한국
System.out.println(s2);
		
// []는 안에 있는 한글자 한글자 의미. 
s2 = s1.replaceAll("[대한0-9A-Za-z]",""); // 우리나라 민국 국
System.out.println(s2);

 

toUpperCase()

  • 대문자로 변환
  • 문자열은 불변이므로 대소문자 변경하려면 다른 문자열에 값 저장해야함.
  • 대문자는 indexOf()가 되지 않으므로 소문자로 변경해서 확인해야함.

toLowerCase()

  • 소문자로 변환
String s, s2;
int n, m;
		
s = "seoul korea";
		
s.toUpperCase(); // 문자열은 불변이므로 대문자로 변경되지 않음.
System.out.println(s);
		
s2 = s.toUpperCase();
System.out.println(s2);

trim()

  • 공백 제거
  • trim() = replace(" ","") = replaceAll("\\s", "")
s = "   자   바   ";
System.out.println(":"+s+":");
System.out.println(":"+s.trim()+":"); // 왼쪽과 오른쪽 공백 제거
System.out.println(":"+s.replaceAll("\\s", "")+":");
System.out.println(":"+s.replace(" ", "")+":");

String.formet()

  • printf와 유사
n = 12345;
s = String.format("%,d", n); // printf()와 사용 방법 유사
System.out.println(s);  // 세자리마다 ,

split()

  • 특정 패턴을 문자열로 분리하여 배열로 반환.
  • 전화번호 분리에 사용됨
s = "자바,스프링,오라클,HTML";
String[] ss = s.split(","); // 특정 패턴을 문자열로 분리하여 배열로 반환. 번호 분리에 사용.
//System.out.println(ss.length); // 4
for(String a:ss) {
	System.out.println(a+" "); // 자바 스프링 오라클 HTML
}
System.out.println();

getBytes()

  • 문자열의 각 문자에 대한 ASCII 코드값 배열로 반환
s = "KOREA";
byte[] bb = s.getBytes(); // 문자열의 각 문자에 대한 ASCII 코드값 배열로 반환
//System.out.println(bb.length); // 5
for(byte a:bb) {
	System.out.print(a+" "); // 75 79 82 69 65 
}
System.out.println();