[32일] Java (21) - String 클래스
다양한 함수
equals()
package oop0908;
public class Test03_String {
public static void main(String[] args) {
// 문자열 클래스
String str = "HAPPY";
String name = new String("HAPPY");
if(str==name) {
System.out.println("같다");
} else {
System.out.println("다르다");
}//if end
위와 같이 == 연산자를 통해 str과 name을 비교하면 "다르다"라는 결과가 출력된다.
같은 HAPPY인데 이러한 결과가 나오는 것은 HAPPY라는 값을 비교하는 것이 아닌 주소가 같은 지 비교하기 때문이다.
str과 name 모두 HAPPY라는 값을 가지고 있지만 메모리에 저장된 위치가 다르다.
따라서 서로 다른 주소를 가진 str과 name을 ==연산자로 비교했을 때 false라는 결과가 나온다.
따라서 HAPPY라는 값 자체를 비교하고 싶을 때는 equals()를 사용하자
//문자열의 내용을 비교하는 경우 == 연산자 사용하지 말고 equls() 함수를 이용할 것
if(str.equals(name)) {
System.out.println("같다");
} else {
System.out.println("다르다");
}//if end

isEmpty()
문자열의 길이가 0인지 아닌지 확인하는 함수
//문자열의 갯수가 0인지?
if(str.isEmpty()) {
System.out.println("빈문자열 이다");
} else {
System.out.println("빈문자열 아니다");
}//if end
split()
문자열을 분리하는 함수
//특정 문자를 기준으로 문자열 분리하기
str = new String("Gone With The Wind");
String[] word = str.split(" "); //공백을 기준으로 분리
for(int i=0; i<word.length; i++) {
System.out.println(word[i]);
}//for end

StringTokenizer
split() 함수처럼 문자열을 분리하는 메소드를 가진 클래스이다.
str = new String("Gone With The Wind");
//문자열에서 공백 문자를 기준으로 분리하기
StringTokenizer st = new StringTokenizer(str, " ");
while(st.hasMoreTokens()) { //토근할 문자가 있는지?
System.out.println(st.nextToken()); //토큰한 문자열 가져오기
}//while end
hasMoreTokens()는 분리 기준으로 한 문자가 있는지 확인하는 함수로 boolean 값을 갖는다.
str 왼쪽부터 오른쪽으로 진행하며 남은 문자열에서 공백이 더 있는지 묻고 더 있으면 true, 없으면 false를 반환한다.
그리고 nestToken()을 통해 분리한 문자열을 가져온다.
https://docs.oracle.com/javase/8/docs/api/
Java Platform SE 8
docs.oracle.com
자세한 사항은 위 사이트에서 StringTokenizer 클래스를 검색하면 알 수 있다.
문자열 연산 속도
String < StringBuffer < StringBuilder 오른쪽으로 갈수록 연산 속도가 빠르다
//문자열 연산 속도 (오른쪽으로 갈수록 빠름)
//String < StringBuffer < StringBuiler
String s1 = "";
System.out.println(s1.length());
s1 = s1 + "one";
System.out.println(s1.length()+s1);
s1 = s1 + "two";
System.out.println(s1.length()+s1);
s1 = s1 + "three";
System.out.println(s1.length()+s1);
//모든 문자열 지우기(빈 문자열 대입)
s1= "";
System.out.println(s1.length()+s1);
////////////////////////////////////////////
StringBuilder s2 = new StringBuilder();
s2.append("SEOUL");
System.out.println(s2.length()+s2.toString());
s2.append("JEJU");
System.out.println(s2.length()+s2.toString());
s2.append("BUSAN");
System.out.println(s2.length()+s2.toString());
//모든 문자열 지우기
s2.delete(0, s2.length());
System.out.println(s2.length());
///////////////////////////////////////////////////
StringBuffer s3 = null;
System.out.println(s3.length()); //NullPointerException 발생
위와 같은 문자열 연산을 할 때 연산을 적게 해야 할 경우에는 String을 사용하여도 괜찮지만
많은 연산을 해야 할 경우에는 String은 StringBuffer, StringBuilder와 비교하여 연산속도가 많이 차이가 나기 때문에
String을 사용하는 것은 부적절할 수 있다.
https://madplay.github.io/post/difference-between-string-stringbuilder-and-stringbuffer-in-java
자바 String, StringBuilder 그리고 StringBuffer 성능 차이 비교
자바에서 String과 StringBuilder 그리고 StringBuffer의 차이는 무엇일까? 그리고 제일 빠른 연산 속도는 어떤 것일까?
madplay.github.io
속도 비교 테스트
https://dog-foot-story.tistory.com/32
[Java] 06. String, StringBuilder 속도 비교
String 클래스 변경 방법 String 클래스는 작은 문자의 변화에도 계속 새로 객체(인스턴스)를 생성하기 때문에 문자열의 변경이 불가능하다. 각각 다른 인스턴스이므로 변수간의 해시 값이 다른 것
dog-foot-story.tistory.com