자바의 문자열

mDev_97·2022년 1월 6일
0

Java

목록 보기
13/28

문자열 (String)

• java.lang.String에 존재
• String 클래스는 하나의 문자열을 표현한다.

String 리터럴

• 문자열을 리터럴로 생성
• JVM이 리터럴을 관리한다.
-> JVM의 스트링 리터럴 테이블에서 관리한다.
• 자바 응용 프로그램 안에서 공유된다.

String s = "JAVA";

new String()

• 문자열을 객체로 생성
• 힙(heap) 메모리에 생성한다.

String s = new String("JAVA");

※ string 객체는 수정할 수 없다.

※ string을 비교하기 위해서는 equals()를 사용하여야 한다.

== 연산자와 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
        //  레퍼런스가 같은지를 비교하기 때문이다.
    }
}

equals()

• 객체의 내용이 같은지를 비교한다.

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!

concat() 메소드 사용

• 기존 String 객체에 그대로 연결하는 것이 아니다.
새로운 String 객체를 리턴한다.
• 따라서, 기존 String 객체에 대입하면 된다.

String str1 = "Java";
String str2 = "Python";

str1 = str1.concat(str2);
// str1에 JavaPython이라는 새로운 string 객체가 대입된다.

String 클래스의 다른 메소드들

trim()

• 문자열의 공백 문자를 제거한다.
• 문자열의 앞과 뒤에 있는 공백 문자만을 제거한다.
-> 문자열 중간에 있는 공백은 제거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!

charAt(int index)

• 문자열 내부에 있는 문자에 접근하기 위해서 사용한다.

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++;
}

length()

• 문자열의 길이를 반환
• 문자의 개수를 반환하는 것과 같다
공백도 문자열이다.

String str = "Ja va";
int i = str.length(); // 5

replace()

• 문자열을 대치하는 메소드

String str = "Java"; // Java
str = str.concat(", Python"); // Java, Python

str = str.replace("Java", "C++"); // C++, Python

contains()

• 문자열의 포함 관계를 파악하기 위해서 사용
• boolean 타입을 리턴

String str = "Programming";
boolean b = str.contains("r"); // true 

문자열 분리

split() 메소드를 사용

String str = "C,C++,Java,Python";
String s[] = str.split(",");
// ["C", "C++", "Java", "Python"]

StringTokenizer 클래스를 사용

• java.util.StringTokenizer를 import하여 사용
• 하나의 문자열을 여러 문자열로 분리한다.
토큰(token) : 구분 문자로 분리된 문자열
• 분리 시 사용되는 기준 문자 : 구분 문자

String str = "이름/나이/성별/거주지";
StringTokenizer strToken = new StringTokenizer(str, "/");

while(strToken.hasMoreTokens()) // 다음 토큰이 있으면 true를 리턴
    System.out.println(strToken.nextToken());
    // nextToken() : 다음 토큰을 리턴
profile
안녕하세요. 백엔드, 클라우드, 인프라에 관심과 열정이 있는 김문성입니다. 😊

0개의 댓글

관련 채용 정보