영벨롭 개발 일지

[Java]자바의 데이터 타입 - String 타입 & 자주 사용하는 메소드 본문

Programming Language/Java

[Java]자바의 데이터 타입 - String 타입 & 자주 사용하는 메소드

영벨롭 2023. 7. 21. 14:17

★ String 타입

 문자열 String 타입은 클래스 타입으로 자바의 참조형 Reference Type 에 해당합니다.

 때문에 String 형으로 선언된 변수 자체는 스택 영역에 저장되고 할당된 String 객체는 힙 영역에 생성되어 변수에 저장되어 있는 값은 String 객체의 값이 아닌 String 객체가 저장되어 있는 힙 메모리 영역의 주소를 갖게 됩니다. 

String str = "안녕하세요!";

 

 

★ String 타입 선언

 String 타입을 선언하는 방법은 문자열 리터럴과 객체 생성자인 new 연산자를 이용하는 방법이 있습니다. 

String str1 = "Hello World"; // 문자열 리터럴
String str2 = new String("Hello World"); // 객체 생성자

- 문자열 리터럴

 문자열 리터럴로 문자열 생성 시, 힙 영역에 동일한 문자열 리터럴이 존재한다면 자바는 새로운 문자열 객체를 생성하지 않고 해당 문자열 객체를 공유하게 해줍니다. 

 다음 예시 코드는 두 문자열 변수 str1, str2 이 동일한 "안녕하세요!" 문자열 리터럴을 갖기 때문에 두 변수는 동일한 힙 영역 주소를 참조하게 됩니다. 

String str1 = "안녕하세요!";
String str2 = "안녕하세요!";

System.out.println(str1 == str2); // true

- new 연산자

 new 연산자로 생성한 문자열 객체는 문자열 리터럴과 달리 무조건 힙 영역에 새로운 객체를 생성하게 됩니다. 

String str1 = new String("안녕하세요!");
String str2 = new String("안녕하세요!");

System.out.println(str1 == str2); // false

 

 

★ 문자열 비교: equals 메소드

 위에서 보인 == 연산자는 두 문자열 객체가 같은 문자열을 갖는지 비교하는 것이 아닌 그것이 가리키는 메모리 주소를 보고 비교하게 됩니다. 

 때문에 두 문자열 객체가 가지는 문자열 값을 비교하기 위해서는 equals 메소드를 사용해야 합니다. 

boolean result = str1.equals(str2);

 다음은 예시 코드입니다. 

String str1 = "Hello";
String str2 = new String("Hello");

System.out.println(str1 == str2); // false
System.out.println(str1.equals(str2)); // true

 

 

★ 문자열 검색: indexOf 메소드

 indexOf 메소드는 문자열 내에서 주어진 매개변수로 주어진 문자열의 위치를 반환합니다. 

 문자열 내의 동일한 문자열이 2개 이상 존재한다면 가장 앞의 위치를 반환하고, 동일한 문자열이 존재하지 않는다면 -1을 반환합니다.

int index = str1.indexOf(str2);

 다음은 예시 코드입니다. 

String temp = "Hello World";
int index1 = temp.indexOf("W");
int index2 = temp.indexOf("o");
int index3 = temp.indexOf("z");
        
System.out.println(index1); // 6
System.out.println(index2); // 4
System.out.println(index3); // -1

 

 

★ 문자열 앞뒤 공백 제거: trim 메소드

 trim 메소드는 문자열의 앞, 뒤 공백을 제거해주는 메소드입니다. 

String str1 = str2.trim();

 다음은 예시 코드입니다.

String tmp1 = "    Hello   ";
tmp1 = tmp1.trim(); // Hello

 

 

★ 문자열 대체: replace 메소드

 replace 메소드는 첫 번째 인수로 target 문자열을, 두 번째 인수로 replacement 문자열을 입력 받아 해당 문자열 내의 target 과 일치하는 문자열을 replacement 문자열로 대치시키는 메소드입니다.

String str1 = str2.replace(target, replacement);

 다음은 예시 코드입니다. 

String temp = "abcaabbcc";
String temp2 = temp.replace("a", "x");
System.out.println(temp2); // xbcxxbbcc

 

 

★ 문자열 슬라이스: substring 메소드

 substring 메소드는 인덱스를 기준으로 문자열을 슬라이스하는 메소드입니다. 

 메소드 오버라이딩이 되어있는 메소드로 첫 번째 인수만 전달하게 되면 첫 번째 인수 ~ 마지막 인덱스까지 슬라이스 하게 되고,

 첫 번째 인수와 두 번째 인수 모두 전달하게 되면 첫 번째 인수 ~ 두 번째 인수-1 까지의 문자열을 슬라이스 하게 됩니다. 

String str1 = temp.substring(startIndex);
String str2 = temp.substring(startIndex, endIndex);

 다음은 예시 코드입니다. 

String temp = "Hello World";
String t1 = temp.substring(3); // 3 ~ 마지막
String t2 = temp.substring(2, 6); // 3 ~ 5

System.out.println(t1); // lo World
System.out.println(t2); // llo

 

 

★ 문자열 대소문자 변환: toUpperCase 메소드 & toLowerCase 메소드

 toUpperCase, toLowerCase 메소드를 사용하여 문자열 내의 모든 문자를 대문자 또는 소문자로 변환할 수 있습니다. 

String upper = str.toUpperCase(); // 대문자로 변환
String lower = str.toLowerCase(); // 소문자로 변환

 다음은 예시 코드입니다. 

String temp = "aBcD";
String upper = temp.toUpperCase();
String lower = temp.toLowerCase();

System.out.println(upper); // ABCD
System.out.println(lower); // abcd

 

반응형