• java.lang.String에 존재
• String 클래스는 하나의 문자열을 표현한다.
• 문자열을 리터럴로 생성
• JVM이 리터럴을 관리한다.
-> JVM의 스트링 리터럴 테이블에서 관리한다.
• 자바 응용 프로그램 안에서 공유된다.
String s = "JAVA";
• 문자열을 객체로 생성
• 힙(heap) 메모리에 생성한다.
String s = new String("JAVA");
※ string 객체는 수정할 수 없다.
※ string을 비교하기 위해서는 equals()를 사용하여야 한다.
• 두 개의 레퍼런스가 같은지를 비교한다.
• == 연산자는 문자열 비교에는 사용하면 안된다.
class Point {
private x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
public class EqualsOperationEx {
public static void main(String[] args) {
Point p1 = new Point(4, 5);
Point p2 = new Point(4, 5);
Point p3 = p1;
boolean b1 = (p1 == p2); // false
boolean b2 = (p1 == p3); // true
// 레퍼런스가 같은지를 비교하기 때문이다.
}
}
• 객체의 내용이 같은지를 비교한다.
class Point {
private x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public boolean equals(Object obj) {
Point p = (Point)obj;
if(x == p.x && y == p.y) {
return true;
} else {
return false;
}
}
}
public class EqualsMethodEx {
public static void main(String[] args) {
Point p1 = new Point(4, 5);
Point p2 = new Point(4, 5);
Point p3 = new Point(3, 4);
boolean b1 = p1.equals(p2); // true
boolean b2 = p1.equals(p3); // false
}
}
• 피연산자에 객체 또는 문자열이 있을 경우에 사용한다.
• 기본 타입인 값은 문자열로 자동 변환되어 연결된다.
System.out.println("Java " + 1 + 's' + " Good!");
// Java 1s Good!
• 기존 String 객체에 그대로 연결하는 것이 아니다.
• 새로운 String 객체를 리턴한다.
• 따라서, 기존 String 객체에 대입하면 된다.
String str1 = "Java";
String str2 = "Python";
str1 = str1.concat(str2);
// str1에 JavaPython이라는 새로운 string 객체가 대입된다.
• 문자열의 공백 문자를 제거한다.
• 문자열의 앞과 뒤에 있는 공백 문자만을 제거한다.
-> 문자열 중간에 있는 공백은 제거x
String str1 = " Java is Good! ";
String str2 = " Python is Good! \t";
String newStr1 = str1.trim();
// Java is Good!
String newStr2 = str2.trim();
// Python is Good!
• 문자열 내부에 있는 문자에 접근하기 위해서 사용한다.
String str1 = "Java";
char c1 = str1.charAt(1); // a
// String 안에 있는 특정 문자의 개수를 세는 예제
int cnt = 0; // 문자의 개수
for(int i = 0; i < str1.length(); i++) {
if(str1.charAt(i) == 'a' || str1.charAt(i) == 'A')
cnt++;
}
• 문자열의 길이를 반환
• 문자의 개수를 반환하는 것과 같다
• 공백도 문자열이다.
String str = "Ja va";
int i = str.length(); // 5
• 문자열을 대치하는 메소드
String str = "Java"; // Java
str = str.concat(", Python"); // Java, Python
str = str.replace("Java", "C++"); // C++, Python
• 문자열의 포함 관계를 파악하기 위해서 사용
• boolean 타입을 리턴
String str = "Programming";
boolean b = str.contains("r"); // true
String str = "C,C++,Java,Python";
String s[] = str.split(",");
// ["C", "C++", "Java", "Python"]
• java.util.StringTokenizer를 import하여 사용
• 하나의 문자열을 여러 문자열로 분리한다.
• 토큰(token) : 구분 문자로 분리된 문자열
• 분리 시 사용되는 기준 문자 : 구분 문자
String str = "이름/나이/성별/거주지";
StringTokenizer strToken = new StringTokenizer(str, "/");
while(strToken.hasMoreTokens()) // 다음 토큰이 있으면 true를 리턴
System.out.println(strToken.nextToken());
// nextToken() : 다음 토큰을 리턴