본문 바로가기

자바(java)

String 클래스

String클래스의 명시적 개체 생성법

String msg = new String("hello");

 

 

String클래스의 암시적 개체 생성법

String str = "hello";

 

동일성비교(==): 기본 자료형에 사용함.

System.out.println(msg == str);
-----------Console------------
false

 

동등성비교(.equal( )): 참조 자료형에 사용함.

System.out.println(msg.equals(str));
-------------Console-----------------
true

 

String 클래스의 불변적 특징

 - 문자열을 변경하기 위해서는 기존 문자열을 변경하지 못하고 새로운 문자열을 생성할 수 있다.

 - 이런 작업을 반복하게 된다면 쓰레기 객체를 생성하여 메모리 효율을 떨어뜨리게 된다.

 - 이를 보완하기 위해 StringBuffer클래스를 사용하여 문자열을 수정/변경 할 수 있다.

 - StringBuffer로 수정 완료 후 최종적인 문자열을 String으로 저장한다. (보편적으로 String을 쓰기 때문에)

String msg = "hello";
String str = msg + "hello world";
System.out.println(msg == str);
----------Console----------------
false

 

StringBuffer클래스

 - append( )메서드를 이용해서 문자(열) 추가

StringBuffer sb = new StringBuffer("hi ");
sb.append("hello");
sb.append("world");
sb.append("!");
String msg = sb.toString();
System.out.println(msg);
-----------------Console--------------------
hi helloworld!

 

String클래스의 주요 메서드

charAt( ) 메서드

 - 특정 인덱스의 문자를 반환하는 메서드

 - msg.charAt(a)

String msg_char = "nike";
char c = msg_char.charAt(0);
System.out.println(c);
---------Console------------
n
-----------Test3클래스---------------
public void w1(String msg, int idx) {
	char c = msg.charAt(idx);
	System.out.println(c);
}
---------------main------------------
Test3 t3 = new Test3();
t3.w1("hello", 0);
-------------Console-----------------
h

 

length( ) 메서드

 - 문자열의 길이(글자 수)를 반환하는 메서드

String msg = "hello";
int size = msg.length();
System.out.println(size);
---------Console---------
5

 

trim( ) 메서드

 - 불필요한 좌우 공백을 제거하는 메서드

public void w4() {
	String msg = "      hello world       ";
	System.out.println(msg);
	msg = msg.trim();
	System.out.println(msg);
}
----------------Console--------------------
      hello world       
hello world

 

substring( ) 메서드

 - 문자열을 잘라내주는 메서드

 - msg.substring(a, b)

    -> a이상 b미만

String msg = "hello_ world_1234";
String str = msg.substring(13);
System.out.println(str);
--------------Console-------------
1234
public void w51(String msg, int beginIdx, int endIdx) {
	String str = msg.substring(beginIdx, endIdx);
	System.out.println(str);
}
----------------------main------------------------------
t3.w51("hello_1234_world,",6,10);
---------------------Console----------------------------
1234

 

indexOf( ) 메서드

 - 문자열에서 특정 문자의 index찾기

 - msg.indexOf('a')

    -> 문자열 msg 에서 처음 a가 나올때의 index

public void w6() {
	String msg = "s_zeaie33z3a9kzfala_도_라_에몽.png";
	int idx = msg.indexOf('_');
	System.out.println(idx);
}
-------------------Console----------------------------
2

 - msg.indexOf('a', b)

    -> 문자열 msg에서 여러개의 문자a에서 인덱스b 이후에 처음으로 등장하는 a의 index

public void w61() {
	String msg = "s_zeaie33z3a9kzfala_도_라_에몽.png";
	int fisrt_underbar_idx = msg.indexOf('_');
	int second_underbar_idx = msg.indexOf('_', fisrt_underbar_idx+1);
	System.out.println(second_underbar_idx);
}
----------------------Console-----------------------------------------
19

 - 활용

    -> 문자열 중간을 잘라내고 싶지만 index를 알지 못해서 substring을 사용하기 힘들 때

public void w62() {
	String msg = "s_zeaie33z3a9kzfala_도_라_에몽.png";
	int fisrt_underbar_idx = msg.indexOf('_');
	int second_underbar_idx = msg.indexOf('_', fisrt_underbar_idx+1);
	String str = msg.substring(fisrt_underbar_idx+1, second_underbar_idx);
	System.out.println(str);
}
--------------------------Console------------------------------------------
zeaie33z3a9kzfala

 

lastIndexOf( ) 메서드

 - 문자열에서 특정 문자가 마지막으로 등장하는 위치의 인덱스를 반환

 - msg.lastIndexOf('a')

public void w7() {
	String filename = "helloworld.png.dat.xls.txt.gif.zip.hwp.jpg";
	int lastIdx = filename.lastIndexOf('.');
	System.out.println(lastIdx);
	String formatname = filename.substring(lastIdx+1);
	System.out.println(formatname);
}
--------------------------------Console-------------------------------
38
jpg

 - 위처럼 확장자명을 알 수 있다.

 

toUpperCase( )/ toLowerCase( ) 메서드

- 문자열을 대문자/소문자로 변환하여 반환

public void w8(String msg) {
	String str1 = msg.toUpperCase();
	String str2 = msg.toLowerCase();
	System.out.println(str1);
	System.out.println(str2);
--------------main-------------------
t3.w8("Nike");
------------Console------------------
NIKE
nike

 

split( ) 메서드

 - 문자열을 지정된 분리자(regex)로 나누어 문자열 배열에 담아 반환

public void w91() {
	String data = "m001#kim##vip#3000#seoul#01011112222#";
	String[] arr = data.split("#");
	for(int i=0; i<arr.length; i++) {
		System.out.println(arr[i]);
	}
}
-------------------------Console--------------------------
m001
kim
          // ##사이의 값을 토큰으로 인식함
vip
3000
seoul
01011112222

---->이를 보완하기 위해 StringTokenizer클래스를 사용(분리자(regex)사이는 인식x)

public void w10() {
	String data = "m001#kim##vip#3000#seoul#01011112222#";
	StringTokenizer st = new StringTokenizer(data, "#"); 
	System.out.println(st.countTokens());  // 토큰의 갯수 세기
	while (st.hasMoreTokens()) {
		String token = st.nextToken();
		System.out.println(token);
	}
	System.out.println("exit");
}
-------------------------Console----------------------------
6
m001
kim
vip
3000
seoul
01011112222
exit

 

 

'자바(java)' 카테고리의 다른 글

인터페이스(Interface)  (0) 2023.03.09
Final(변수, 메서드, 클래스)  (0) 2023.03.09
상속 (Inheritance)  (0) 2023.03.09
스태틱(클래스)변수와 인스턴스변수  (0) 2023.03.06
배열 (Array)  (0) 2023.03.06