가자미의 개발이야기

자바 String 클래스와 StringBuilder 클래스 본문

Java/자바 기본 문법

자바 String 클래스와 StringBuilder 클래스

가자미 2021. 1. 6. 21:59

a. String 클래스의 특징

자바에서는 String str1="java"; 도 유심히 살펴볼 이유가 있다.

str1이라는 String 인스턴스가 생성되어 "java"라는 데이터를 인스턴스로 전달해준 셈이다.

String str1=new String("java"); 이런 의미인 셈이다.

 

이때 하나 기억해야 할 것이 자바 String 인스턴스는 immutable 인스턴스 라는 사실이다.

(immutable은 값이 변경할 수 없는 상태를 말한다.)
따라서 String 인스턴스 생성을 최소한으로 한다.(오류가 일어날 확률이 없기 때문)

 

String 클래스는 다른 기본 자료형과 +연산이 가능하다.

다른 기본자료형을 String 클래스로 바꾸고 서로 이어붙여서 반환한다.

다르게 생각하면 어떤 자료형을 String으로 바꾸고 싶으면 ""(빈 문자열)을 더하면 된다!!

 

b. String 클래스의 메소드

메소드명 매개변수 반환값 설명
boolean equals(String str) 비교할 문자열 문자열이 동일한지 참거짓 오버라이딩된 메소드.
char charAt(int index) 인덱스 번호 해당 인덱스의 char값 문자열에서 인덱스로 문자에 접근
int length()   문자열의 길이  
boolean isEmpty()   문자열이 null인지 아닌지 참거짓  
char[] toCharArray()   문자열을 문자배열로 반환  
boolean contains(String str) 포함을 확인할 문자열 포함 여부 참거짓  
String valueOf(Object o) 기본 자료형 모두 기본자료형을 문자열로 반환 null인 경우도 문자열로 반환
int compareTo(String str) 비교 결과를 숫자로 표현 비교할 문자열 양수면 인스턴스가 앞섬, 0이면 동일, 음수면 매개변수가 앞섬
int compareToIgnoreCase(String str) 비교 결과를 숫자로 표현 비교할 문자열 대소문자를 무시하고 두 문자열 비교
String concat(String str) 이어붙일 문자열 두 문자열을 붙인 문자열 인스턴스에 매개변수를 이어붙임
int indexOf(int ch) 문자열에서 찾을 문자의 아스키 코드값 일치하는 문자의 인덱스 값
(일치값이 없으면 -1)
 
int indexOf(int ch, int idx) 아스키 코드값, 특정 인덱스 일치하는 문자의 인덱스 값
(일치값이 없으면 -1)
특정 인덱스 이후 아스키 코드와 맞는 인덱스 값 반환
int indexOf(String str) 찾으려는 문자열 문자열이 처음 등장하는 인덱스 값(없으면 -1)  
int indexOf(String str, int idx) 찾으려는 문자열, 특정 인덱스 특정 인덱스 이후 문자열이 처음 등장하는 인덱스 값(없으면 -1) 특정 인덱스 이후 문자열 시작 인덱스를 찾음.
int lastIndexOf(int ch) 찾으려는 문자의 아스키 코드 찾으려는 값이 마지막으로 나온 인덱스값 indexOf와 진행방향이 반대
int lastIndexOf(int ch, int idx) 아스키 코드, 특정 인덱스 특정 인덱스 이전에 마지막으로 찾는 내용이 등장한 인덱스 indexOf와 진행방향이 반대
int lastIndexOf(String str) 찾으려는 문자열 찾으려는 값이 마지막으로 나온 인덱스값 indexOf와 진행방향이 반대
int lastIndexOf(String str, int idx) 문자열, 특정 인덱스 특정 인덱스 이전에 마지막으로 찾는 내용이 등장한 인덱스 indexOf와 진행방향이 반대
String[] split(String regex) 정규표현식이나 특정 문자열 주어진 값 기준으로 나눠진 문자열 배열  
String toUpperCase()   문자열을 모두 대문자화  
String toLowerCase()   문자열을 모두 소문자화  
String trim()   앞뒤 공백을 제거한 문자열 반환 입력받은 값의 오류를 제거할 때 사용
String substring(int begin, int end) 시작 인덱스와 마지막 인덱스 시작부터 마지막-1을 인덱스로 하여 문자열 반환 end는 생략가능
마지막 -1을 유의할 것
Byte[] getByte()   문자열을 byte배열로 반환 한글은 한 글자당 2바이트다.
String replaceAll(String regex, String replace) 변환 대상 문자열, 대신할 문자열 교체된 문자열 반환 정규표현식 사용가능

 

 

c. StringBuilder

주의할 점!

양 7 . 16을 모두 합쳐 한 문자열로 만들려면?

양을 String 인스턴스로 만들고 다른 것들은 일일히 다 문자열로 바꾸고 하나씩 concat? 그러면 너무 많은 String 인스턴스가 발생...

 

그렇다면 어떻게 해결해야 될까?

양을 String 인스턴스 말고 StringBuilder 인스턴스(버퍼 기능)로 대신하자! 그리고 append함수로 추가하고
마지막에 .toString()메소드로 마무리!

이렇게 문자열을 수정하거나 추가할 수 있는 StringBuilder는 유용하게 쓰일 수 있다!

 

d. 문자열과 기본형 변환

기본형을 문자열로

빈 문자열을 더하거나, valueof()메소드를 사용.

int i = 100;
String str1 = i+"";
String str2 = String.valueOf(i);

문자열을 기본형으로

ValueOf() 메소드나 parseInt()메소드를 사용
parseBoolean, parseByte, ParseShort....

//오토박싱에 의해 Integer가 int형이 된다.
int i = Integer.parseInt("100");
int i2 = Integer.valueOf("100");
int i3 = new Integer("100").intValue();

e. StringBuilder 메소드

메소드명 매개변수 반환값 비고
String toString()   StringBuilder를 문자열로 반환 가공되지 않은 재료를 가지고 있다가 문자열로 바꿈
StringBuilder append(Object o) 기본 자료형을 포함한 다양한 매개변수 매개변수를 뒤에 붙인 StringBuilder를 반환 end생략 가능
StringBuilder delete(int start, int end) 시작 인덱스, 끝 인덱스 시작~끝-1 인덱스를 삭제한 StringBuilder를 반환  
StringBuilder replace(int start, int end, String str) 시작 인덱스, 끝 인덱스, 문자열 시작~끝-1 인덱스를 지우고, 특정 문자열을 삽입  
StringBuilder reverse()   StringBuilder의 순서 반전한 StringBuilder 반환  
StringBuilder substring(int start, int end) 시작 인덱스, 끝 인덱스 시작~끝-1 인덱스 StringBuilder를 반환  

 

여기서 toString() 메소드에 대해 더 얘기해보자

모든 클래스에는 toString()를 갖고 있다.

println이 인스턴스를 인수로 받으면 그 인스턴스의 toString 반환값을 출력한다.

 

StringBuilder는 StringBuffer로 대체 가능하다.

(생성자를 포함한 메소드의 수, 메소드의 기능, 메소드의 이름과 매개변수의 선언)

하지만 StringBuffer는 쓰레드에 더 안전하지만

쓰레드 안정성이 불필요한 상황에서 StringBuffer를 사용하면 성능 저하가 일어난다.

'Java > 자바 기본 문법' 카테고리의 다른 글

자바의 배열  (0) 2021.01.07
자바 콘솔 입출력  (0) 2021.01.07
자바의 오버로딩  (0) 2021.01.06
자바에서 System.out.println 의 의미는 무엇일까?  (0) 2021.01.05
자바의 스태틱이란 뭘까?  (0) 2021.01.05