String 클래스는 문자열의 추출, 비교, 찾기, 분리, 변환 등과 같은 다양한 메소드를 가지고 있습니다. 그중에서도 사용 빈도수가 높은 10가지 메소드를 소개합니다.

리턴 타입 메소드 이름(매개 변수) 설명
char charAt(int index) 특정 위치의 문자를 리턴합니다.
boolean equals(Object anObject) 두 문자열을 비교합니다.
byte[] getBytes() byte[]로 리턴합니다.
byte[] getBytes(Charset charset) 주어진 문자셋으로 인코딩한 byte[]로 리턴합니다.
int indexOf(String str) 문자열 내에서 주어진 문자열의 위치를 리턴합니다.
int length() 총 문자의 수를 리턴합니다.
String replace(CharSequence target, CharSequence replacement) target 부분을 replacement로 대치한 새로운 문자열을 리턴합니다.
String substring(int beginIndex) beginIndex 위치에서 끝까지 잘라낸 새로운 문자열을 리턴합니다.
String substring(int beginIndex, int endIndex) beginIndex 위치에서 endIndex 전까지 잘라낸 새로운 문자열을 리턴합니다.
String toLowerCase() 알파벳 소문자로 변환한 새로운 문자열을 리턴합니다.
String toUpperCase() 알파벳 대문자로 변환한 새로운 문자열을 리턴합니다.
String trim() 앞뒤 공백을 제거한 새로운 문자열을 리턴합니다.
String valueOf(int i)
valueOf(double d)
기본 타입 값을 문자열로 리턴합니다.

 

 

 


✅문자 추출(charAt( ))

charAt( ) 메소드는 매개값으로 주어진 인덱스의 문자를 리턴합니다. 여기서 인덱스란 0에서부터 ‘문자열 길이-1’까지의 번호를 말합니다. 

String subject = "자바 프로그래밍";
char charValue = subject.charAt(3);

 

“자바 프로그래밍” 문자열은 다음과 같이 인덱스를 매길 수 있습니다. charAt(3)은 3번 인덱스 위치에 있는 문자를 말합니다. 즉 ‘프’ 문자가 해당됩니다. 

 
0 1 2 3 4 5 6 7

 

 

 

✅문자열 비교(equals( ))

기본 타입(byte, char, short, int, long, float, double, boolean) 변수의 값을 비교할 때에는 == 연산자를 사용합니다. 그러나 문자열을 비교할 때에는 == 연산자를 사용하면 원하지 않는 결과가 나올 수 있습니다.

String strVar1 = new String(“신민철”);
String strVar2 = “신민철”;
String strVar3 = “신민철”;

 

자바는 문자열 리터럴이 동일하다면 동일한 String 객체를 참조하도록 되어 있습니다. 그래서 strVar2와 strVar3은 동일한 String 객체를 참조합니다. 그러나 strVar1은 new 연산자로 생성된 다른 String 객체를 참조합니다.

 

 

이 경우 변수 strVar1과 strVar2의 == 연산은 false를 산출하고 strVar2와 strVar3의 == 연산은 true를 산출합니다. == 연산자는 각 변수에 저장된 번지를 비교하기 때문에 이러한 결과가 나옵니다.

strVar1 == strVar2 //false
strVar2 == strVar3 //true

 

만약 두 String 객체의 문자열만을 비교하고 싶다면 == 연산자 대신에 equals( ) 메소드를 사용해야 합니다. 원래 equals( )는 Object 클래스의 번지 비교 메소드이지만, String 클래스가 재정의해서 문자열을 비교하도록 변경했습니다.

strVar1.equals(strVar2) //true
strVar2.equals(strVar3) //true

 

 

 

✅바이트 배열로 변환(getBytes( ))

종종 문자열을 바이트 배열로 변환하는 경우가 있는데요, 대표적인 예로 네트워크로 문자열을 전송하거나, 문자열을 암호화할 때 문자열을 바이트 배열로 변환하는 경우가 있습니다. 문자열을 바이트 배열로 변환하는 메소드는 다음 두 가지가 있습니다.

byte[] bytes = "문자열".getBytes();
byte[] bytes = "문자열".getBytes(Charset charset);

 

getBytes( ) 메소드는 시스템의 기본 문자셋으로 인코딩된 바이트 배열을 리턴합니다. 만약 특정 문자셋으로 인코딩된 바이트 배열을 얻으려면 두 번째 메소드를 사용하면 됩니다. 다음은 EUC-KR과 UTF-8로 각각 인코딩된 바이트 배열을 리턴합니다.

try {
    byte[] bytes1 = "문자열".getBytes("EUC-KR");
    byte[] bytes2 = "문자열".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
}

 

어떤 문자셋으로 인코딩하느냐에 따라 바이트 배열의 크기가 달라집니다. EUC-KR은 getBytes( )와 마찬가지로 알파벳은 1바이트, 한글은 2바이트로 변환하고, UTF-8은 알파벳은 1바이트, 한글은 3바이트로 변환합니다. getBytes(Charset charset) 메소드는 잘못된 문자셋을 매개값으로 줄 경우, java.io.UnsupportedEncodingException이 발생하므로 예외 처리가 필요합니다.

바이트 배열을 다시 문자열로 변환(디코딩)할 때에는 어떤 문자셋으로 인코딩된 바이트 배열이냐에 따라서 디코딩 방법이 다릅니다. 단순하게 String(byte[] bytes) 생성자를 이용해서 디코딩하면 시스템의 기본 문자셋을 이용합니다. 시스템 기본 문자셋과 다른 문자셋으로 인코딩된 바이트 배열일 경우 다음 String 생성자를 이용해서 디코딩해야 합니다.

String str = new String(byte[] bytes, String charsetName);

 

 

 

✅문자열 찾기(indexOf( ))

indexOf( ) 메소드는 매개값으로 주어진 문자열이 시작되는 인덱스를 리턴합니다. 만약 주어진 문자열이 포함되어 있지 않으면 -1을 리턴합니다.

String subject = "자바 프로그래밍";
int index = subject.indexOf("프로그래밍");

 

index 변수에는 3이 저장되는데, “자바 프로그래밍”에서 “프로그래밍” 문자열의 인덱스 위치가 3이기 때문입니다.

 
0 1 2 3 4 5 6 7

 

indexOf( ) 메소드는 if문의 조건식에서 특정 문자열이 포함되어 있는지 여부에 따라 실행 코드를 달리할 때 자주 사용됩니다. -1 값을 리턴하면 특정 문자열이 포함되어 있지 않다는 뜻입니다.

if( 문자열.indexOf("찾는문자열") != -1 ) {
    //포함되어 있는 경우
} else {
    //포함되어 있지 않은 경우
}

 

 

 

✅문자열 길이(length( ))

length( ) 메소드는 문자열의 길이(문자의 수)를 리턴합니다.

String subject = "자바 프로그래밍";
int length = subject.length();

 

length 변수에는 8이 저장됩니다. subject 객체의 문자열 길이는 공백을 포함해서 8개이기 때문입니다.

 
0 1 2 3 4 5 6 7

 

 

 

✅문자열 대치(replace( ))

replace( ) 메소드는 첫 번째 매개값인 문자열을 찾아 두 번째 매개값인 문자열로 대치한 새로운 문자열을 생성하고 리턴합니다.

String oldStr = "자바 프로그래밍";
String newStr = oldStr.replace("자바", "JAVA");

 

String 객체의 문자열은 변경이 불가능한 특성을 갖기 때문에 replace( ) 메소드가 리턴하는 문자열은 원래 문자열의 수정본이 아니라 완전히 새로운 문자열입니다. 따라서 newStr 변수는 다음 그림과 같이 새로 생성된 “JAVA 프로그래밍” 문자열을 참조합니다.

자바 문자열 대치_replace

 

 

 

✅문자열 잘라내기(substring( ))

substring( ) 메소드는 주어진 인덱스에서 문자열을 추출합니다. substring( ) 메소드는 매개값의 수에 따라 두 가지 형태로 사용됩니다. substring(int beginIndex, int endIndex)는 주어진 시작과 끝 인덱스 사이의 문자열을 추출하고, substring(int beginIndex)는 주어진 인덱스부터 끝까지문자열을 추출합니다.

String ssn = "880815-1234567";
String firstNum = ssn.substring(0, 6);
String secondNum = ssn.substring(7);

 

상기 코드에서 firstNum 변수값은 “880815”이고, secondNum 변수값은 “1234567”입니다. ssn.substring(0, 6)은 인덱스 0(포함)~6(제외) 사이의 문자열을 추출하는 것이고, substring(7)은 인덱스 7부터 끝까지 문자열을 추출합니다.

8 8 0 8 1 5 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 8 9 10 11 12 13

 

 

 

✅알파벳 소·대문자 변경(toLowerCase( ), toUpperCase( ))

toLowerCase( ) 메소드는 문자열을 모두 소문자로 바꾼 새로운 문자열을 생성한 후 리턴합니다. 반대로 toUpperCase( ) 메소드는 문자열을 모두 대문자로 바꾼 새로운 문자열을 생성한 후 리턴합니다.

String original = "Java Programming";
String lowerCase = original.toLowerCase();
String upperCase = original.toUpperCase();

 

lowerCase 변수는 새로 생성된 “java programming” 문자열을 참조하고 upperCase 변수는 새로 생성된 “JAVA PROGRAMMING” 문자열을 참조합니다. 이때 원래 original 변수의 “Java Programming” 문자열이 변경된 것은 아닙니다.

 

자바 대소문자 변경

 

toLowerCase( )와 toUpperCase( ) 메소드는 영어로 된 두 문자열을 대소문자와 관계없이 비교할 때 주로 이용됩니다. 다음 예제에서는 두 문자열이 대소문자가 다를 경우 어떻게 비교하는지를 보여줍니다. equals( ) 메소드를 사용하려면 사전에 toLowerCase( )와 toUpperCase( )로 대소문자를 맞추어야 하지만, equalsIgnoreCase( ) 메소드를 사용하면 이 작업이 생략됩니다.

 

 

 

✅문자열 앞뒤 공백 잘라내기(trim( ))

trim( ) 메소드는 문자열의 앞뒤 공백을 제거한 새로운 문자열을 생성하고 리턴합니다. 다음 코드를 보면 newStr 변수는 앞뒤 공백이 제거된 새로 생성된 “자바 프로그래밍” 문자열을 참조합니다. trim( ) 메소드는 앞뒤의 공백만 제거할 뿐 중간의 공백은 제거하지 않습니다.

String oldStr = " 자바 프로그래밍 ";
String newStr = oldStr.trim();

 

trim( ) 메소드를 사용한다고 해서 원래 문자열의 공백이 제거되는 것은 아닙니다. 다음 그림에서 oldStr.trim( )은 oldStr의 공백을 제거하는 것이 아닙니다.

자바 문자열 앞뒤 공백 제거

 

 

 

✅문자열 변환(valueOf( ))

valueOf( ) 메소드는 기본 타입의 값을 문자열로 변환하는 기능을 가지고 있습니다. String 클래스에는 매개 변수의 타입별로 valueOf( ) 메소드가 다음과 같이 오버로딩되어 있습니다.

static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(int i)
static String valueOf(long l)
static String valueOf(double d)
static String valueOf(float f)

 

 

 


혼자 공부하는 자바

 

위 내용은 『혼자 공부하는 자바』의 일부분을 재구성하여 작성하였습니다.

핵심 내용 위주로 구성하여 이제 막 자바를 배우기 시작한 입문자도 포기하지 않고 완독할 수 있습니다. 자바 입문부터 복습까지, 혼자 공부하는 자바를 펼쳐보세요!

👀 도서 자세히 보기
✍️ 유튜브 강의
🙋 신용권 저자님께 질문하기