문자열(String)
자바의 문자열은 String 객체로 생성된다.
String name;
name = "이름";
String hobby = "취미";
변수에 문자열 리터럴이 대입되면 문자열은 String 객체로 생성되고, 객체의 번지가 각각 대입된다.
- String 타입 name 변수 선언
- name 변수에 문자열 대입
- String 타입 변수 hobby 선언 후 문자열 대입
문자열 비교
String name1 = "이름";
String name2 = "이름";
자바는 문자열 리터럴이 동일하다면 String 객체를 공유한다.
String name1 = new String("이름");
String name2 = new String("이름");
new 연산자로 직접 String 객체를 생성하고 대입할 수 있다. new 연산자는 새로운 객체를 만드는 연산자로 객체 생성 연산자라고 한다.
new 연산자로 대입할 경우 두 변수는 같은 객체를 공유하지 않고 각각 서로 다른 객체의 번지를 가진다.
문자열 리터럴로 생성하느냐 new 연산자로 생성하느냐에 따라 비교 연산자의 결과가 달라진다.
String name1 = "이름";
String name2 = "이름";
String name3 = new String("이름");
name1 == name2 // true
name1 == name3 // false
name1과 name2는 동일한 문자열 리터럴로 생성된 객체를 참조하여 true, name3은 new 연산자로 String 객체를 별도 생성하여 false 결과가 나온다.
내부 문자열만 비교할 경우 String 객체의 equals() 메소드를 사용한다.
boolean result = str1.equals(str2);
예제 코드
public static void main(String[] args) {
String strVal1 = "이름";
String strVal2 = "이름";
if (strVal1 == strVal2) {
System.out.println("strVal1과 strVal2는 참조가 같음 ");
} else {
System.out.println("strVal1과 strVal2는 참조가 다름 ");
}
if (strVal1.equals(strVal2)) {
System.out.println("strVal1과 strVal2는 문자열이 같음 ");
}
String strVal3 = new String("이름");
String strVal4 = new String("이름");
if (strVal3 == strVal4) {
System.out.println("strVal3과 strVal4는 참조가 같음 ");
} else {
System.out.println("strVal3과 strVal4는 참조가 다름 ");
}
if (strVal3.equals(strVal4)) {
System.out.println("strVal1과 strVal2는 문자열이 같음 ");
}
}

String 변수에 빈 문자열(" ")을 대입할 수 있으며, String 객체로 생성되기 때문에 변수가 빈 문자열을 참조하는지 확인하려면 equals 메소드를 사용하여 확인한다.
예제 코드
public static void main(String[] args) {
String name = "";
if (name.equals("")) {
System.out.println("name 변수가 참조하는 String 객체는 빈 문자열");
}
}

charAt()
문자열에서 특정 위치의 문자를 얻고 싶을 때 매개값으로 주어진 인덱스의 문자를 리턴한다.
String subject = "자바 프로그래밍";
char charValue = subject.charAt(3); // 프
예제 코드
public static void main(String[] args) {
String ssn = "9902021230123";
char sex = ssn.charAt(6);
System.out.println("sex = " + sex);
if (sex == '1' || sex == '3') {
System.out.println("남자");
} else {
System.out.println("여자");
}
}

length()
문자열에서 문자의 개수를 얻고 싶을 때 사용한다.
예제 코드
public static void main(String[] args) {
String ssn = "9901081230123";
int length = ssn.length();
if (length == 13) {
System.out.println("주민등록번호 자릿수가 맞습니다.");
} else {
System.out.println("주민등록번호 자릿수가 틀립니다.");
}
}
replace()
특정 문자열을 다른 문자열로 대체할 때 사용한다. replace() 메소드는 기존 문자열은 그대로 두고, 대체한 새로운 문자열을 반환한다.
String oldStr = "자바 프로그래밍";
String newStr = oldStr.replace("자바", "JAVA");
String 객체의 문자열은 변경이 불가한 특성을 갖기 때문에 replace() 메소드가 리턴하는 문자열은 원래 문자열의 수정본이 아니라 완전히 새로운 문자열이다.
예제 코드
public static void main(String[] args) {
String oldStr = "자바 문자열은 불변입니다. 자바 문자열은 String입니다.";
String newStr = oldStr.replace("자바", "Java");
System.out.println("oldStr = " + oldStr);
System.out.println("newStr = " + newStr);
String testStr = "테스트 입니다. 테스트라구요.";
testStr = testStr.replace("테스트", "test");
System.out.println("testStr = " + testStr);
}

substring()
문자열에서 특정 위치의 문자열을 잘라내어 가져올 때 사용한다.
메소드 | 설명 |
substring(int beginIndex) | beginIndex에서 끝까지 잘라내기 |
substring(int beginIndex, int endIndex) | beginIndex에서 endIndex 앞까지 잘라내기 |
public static void main(String[] args) {
String ssn = "990108-1234567";
String first = ssn.substring(0, 6);
String second = ssn.substring(7);
System.out.println("first = " + first); // 990108
System.out.println("second = " + second); // 1234567
}
문자열 찾기
indexOf()
문자열에서 특정 문자열의 위치를 찾을 때 사용한다.
String subject = "자바 프로그래밍";
int index = subject.indexOf("프로그래밍"); // 3
indexOf() 메소드는 주어진 문자열이 시작되는 인덱스를 리턴하며, 만약 주어진 문자열이 포함되어 있지 않으면 -1을 리턴한다.
contains()
주어진 문자열이 단순히 포함되어 있는지만 확인할 때 사용한다.
boolean result = subject.contains("프로그래밍");
원하는 문자열이 포함되어 있으면 contains() 메소드는 true를 리턴하고, 아니면 false를 리턴한다.
예제 코드
public static void main(String[] args) {
String subject = "자바 프로그래밍";
int location = subject.indexOf("프로그래밍");
System.out.println("location = " + location);
String substring = subject.substring(location);
System.out.println("substring = " + substring);
location = subject.indexOf("자바");
if (location != -1) {
System.out.println("자바 단어 포함");
} else {
System.out.println("자바 단어 미포함");
}
boolean result = subject.contains("자바");
if (result) {
System.out.println("자바 포함");
} else {
System.out.println("자바 미포함");
}
}

split()
문자열을 따로 분리해서 얻고 싶을 때 사용한다.
String board = "번호,제목,내용,성명";
String[] arr = board.split(",");
예제 코드
public static void main(String[] args) {
String board = "1,자바 학습,참조 타입 String을 학습함.,이름";
String[] tokens = board.split(",");
System.out.println("번호 : " + tokens[0]);
System.out.println("제목 : " + tokens[1]);
System.out.println("내용 : " + tokens[2]);
System.out.println("성명 : " + tokens[3]);
System.out.println();
// for 이용
for (int i = 0; i < tokens.length; i++) {
System.out.println(tokens[i]);
}
}

'IT > Java' 카테고리의 다른 글
[Java] 다차원 배열 (0) | 2024.02.27 |
---|---|
[Java] 배열(Array) (0) | 2024.02.27 |
[Java] null / NullPointerException (0) | 2024.02.26 |
[Java] 참조 타입 변수 ==, != 연산 (0) | 2024.02.26 |
[Java] 참조 타입 (0) | 2024.02.26 |