1. 문자열(String)이란?

  • 클래스(class)를 통해 문자열 타입으로 선언된다
  • char 타입의 배열을 의미한다
  • String 타입은 참조 자료형이다

2. String  클래스 선언

  • 'String 참조변수 ; 참조변수 = "문자열"'의 형태로 선언 : 문자열 리터럴을 대입하는 방식
  • 'String 참조변수 = "문자열"'의 형태로 선언 : 문자열 리터럴을 대입하는 방식
  • 'String 참조변수 = new String("문자열")'의 형태로 선언 : 객체를 생성하고 문자열을 대입하는 방식
public class Grade {
    public static void main(String[] args) {
        String str;
        str = "문자열";
        System.out.println(str);

        String str1 = "문자열1";
        System.out.println(str1);

        String str2 = new String("문자열2");
        System.out.println(str2);
    }
}

result
문자열
문자열1
문자열2
  • 'String 참조변수 = "문자열"'의 형태로 선언
  • 문자열 리터럴을 대입하는 방식의 주소값과 객체를 생성하는 방식의 주소값은 서로 다르다
  • 그러므로, 문자열을 비교할 경우 등호"=" 대신 equals를 사용한다 ("=="은 저장공간의 주소를 비교하므로 문자열에 적합하지 않다)
public class Grade {
    public static void main(String[] args) {
        String str;
        str = "문자열";
        String str1 = "문자열";
        String str2 = new String("문자열");

        System.out.println(str==str1);
        System.out.println(str==str2);
    }
}

result
true
false
  • 위에 코드에서 str==str1은 true로 같지만, str==str2는 false로 서로 다르다

3. String 특성

  • String 문자열은 내용을 변경할 수 없다
  • a = a+ b로 인하여 문자열 결합을 하였을 때 새로운 a의 저장공간이 생성된다
  • a = a + b의 결과가 "문자열1"이 아닌 "문자열1문자열2"로 출력되며, a라는 새로운 저장공간이 생성된다
a = "문자열1";
b = "문자열2";
a = a + b;
System.out.println(a);

result
문자열1문자열2
  • 수식에 의한 새로운 저장공간의 생성은 데이터의 처리 속도를 지연시킨다
  • 문자열 변환이 필요한 변수에는 StingBuffer 메서드를 사용하는  것이 편리하다
  • 같은 내용의 문자열 리터럴은 하나만 만들어진다 
String a = "abc";
String b = "abc";
String c = "abc";

//문자열이 동일하므로 "abc" 저장공간 1개만 생성된다

4. String 관련 대표 method

 1) charAt( )

  • 해당 문자열의 특정 인덱스에 해당하는 문자를 반환한다
  • 해당 문자열의 길이보다 큰 인덱스나 음수를 전달하면, 오류가 발생한다
public class Grade {
    public static void main(String[] args) {
        String str =new String("charAt method");
        System.out.println("문자열 : "+ str);// "문자열 : charAt method""
        System.out.println(str.charAt(0));// 'c'
        System.out.println(str.charAt(4));// 'A'
        System.out.println(str.charAt(6));// ' '
        System.out.println(str.charAt(12));// 'd'
        System.out.println(str.charAt(13));// 'error'
        System.out.println("\ncharAt() 메서드 호출 후 문자열 : "+ str);
    }
}

result
문자열 : charAt method
c
A
 
d
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 13
	at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:47)
	at java.base/java.lang.String.charAt(String.java:693)
	at Grade.main(Grade.java:9)
    
//13번째문자열이 인덱스를 벗어났다고 에러 표시
public class Grade {
    public static void main(String[] args) {
        String str =new String("charAt method");
        System.out.println("문자열 : "+ str);// "문자열 : charAt method""
        System.out.println(str.charAt(0));// 'c'
        System.out.println(str.charAt(4));// 'A'
        System.out.println(str.charAt(6));// ' '
        System.out.println(str.charAt(12));// 'd'
        //System.out.println(str.charAt(13));// 'error'
        System.out.println("\ncharAt() 메서드 호출 후 문자열 : "+ str);
    }
}

result
문자열 : charAt method
c
A
 
d

charAt() 메서드 호출 후 문자열 : charAt method

//index 13을 주석 처리 후 정상 출력

 

 2) compareTo( )

  • 해당 문자열을 인수로 전달된 문자열과 사전 편찬 순으로 비교
  • 문자열을 비교할 때 대소문자를 구분하여 비교한다
  • 두 문자열이 같다면 0을 반환
  • 해당 문자열이 인수로 전달된 문자열보다 작으면 음수를, 크면 양수를 반환
  • - 문자열을 비교할 때 대소문자를 구분하지 않으려면 compareToIgnoreCase() 메서드를 사용
public class Grade {
    public static void main(String[] args) {
        String str =new String("abcde");
        System.out.println("문자열 : "+ str);// "문자열 : charAt method""
        System.out.println(str.compareTo("abcdef"));// 인수가 매개변수보다 작으므로 -1
        System.out.println(str.compareTo("abcde"));// 인수와 매개변수가 같으므로 0
        System.out.println(str.compareTo("abcd"));//인수가 매개변수보다 크므로 1
        System.out.println(str.compareTo("aBcde"));// 'd'
        System.out.println(str.compareToIgnoreCase("aBcde"+ str));
    }
}

result
문자열 : abcde
-1
0
1
32
-5

 

 3) contact( )

  • 해당 문자열의 뒤에 인수로 전달된 문자열을 추가한 새로운 문자열을 반환한다
  • concatenate의 약자로 '연결한다'는 의미이다
  • 인수로 전달된 문자열의 길이가 0이면, 해당 문자열을 그대로 반환한다
public class Grade {
    public static void main(String[] args) {
        String str =new String("concat");
        System.out.println("문자열 : "+ str);
        System.out.println(str.concat(" - method"));
        System.out.println(str.concat(""));
        System.out.println("concat() 메서드 호출 전 문자열 : "+ str);
    }
}

result
문자열 : concat
concat - method
concat
concat() 메서드 호출 전 문자열 : concat

 

 4) indexOf( )

  • 해당 문자열에서 특정 문자나 문자열이 처음으로 등장하는 위치의 인덱스를 반환한다
  • 문자열의 대소문자를 구분한다
  • 만약 해당 문자열에 전달된 문자나 문자열이 포함되어 있지 않으면 -1을 반환한다
public class Grade {
    public static void main(String[] args) {
        String str =new String("indexOf-method");
        System.out.println("문자열 : "+ str);
        System.out.println(str.indexOf('o'));//소문자 'o'의 위치값
        System.out.println(str.indexOf('O'));//대문자 'O'의 위치값
        System.out.println(str.indexOf('a'));//소문자 'a'의 위치값
        System.out.println(str.indexOf("-"));//특수문자 '-'의 위치값
        System.out.println("indexOf() 메서드 호출 후 원본 문자열 : "+ str);
    }
}

result
문자열 : indexOf-method
12
5
-1
7
indexOf() 메서드 호출 후 원본 문자열 : indexOf-method

 

 5) trim( )

  • 해당 문자열의 맨 앞과 맨 뒤에 포함된 모든 공백 문자를 제거한다
public class Grade {
    public static void main(String[] args) {
        String str =new String("   trim     ");
        System.out.println("문자열 : "+ str);
        System.out.println(str +"end");
        System.out.println("0"+str.trim()+"-end");
        System.out.println("trim() 메서드 호출 후 문자열 : "+ str);
    }
}

result
문자열 :    trim     
   trim     end
0trim-end
trim() 메서드 호출 후 문자열 :    trim
 
 6) toLowerCase()toUpperCase()
  • toLowerCase() : 해당 문자열의 모든 문자를 소문자로 변환한다
  • toUpperCase() : 해당 문자열의 모든 문자를 대문자로 변환한다
public class Grade {
    public static void main(String[] args) {
        String str =new String("toUpper/LowerCase");
        System.out.println("문자열 : "+ str);
        System.out.println(str.toLowerCase());
        System.out.println(str.toUpperCase());
        System.out.println("두 메서드 호출 후 문자열 : "+ str);
    }
}

result
문자열 : toUpper/LowerCase
toupper/lowercase
TOUPPER/LOWERCASE
두 메서드 호출 후 문자열 : toUpper/LowerCase
 

 7) 그 외 String 메서드 설명

char charAt(int index) 해당 문자열의 특정 인덱스에 해당하는 문자를 반환함.
String(char[ ] value) 주어진 문자열(char[ ])을 갖는 String으로 변환한다
int compareTo(String str) 해당 문자열을 인수로 전달된 문자열과 사전 편찬 순으로 비교함.
int compareToIgnoreCase(String str) 해당 문자열을 인수로 전달된 문자열과 대소문자를 구분하지 않고 사전 편찬 순으로 비교함.
String concat(String str) 해당 문자열의 뒤에 인수로 전달된 문자열을 추가한 새로운 문자열을 반환함.
int indexOf(int ch)int indexOf(String str) 해당 문자열에서 특정 문자나 문자열이 처음으로 등장하는 위치의 인덱스를 반환함.
int indexOf(int ch, int fromIndex)
int indexOf(String str, int fromIndex)
해당 문자열에서 특정 문자나 문자열이 전달된 인덱스 이후에 처음으로 등장하는 위치의 인덱스를 반환함.
int lastIndexOf(int ch) 해당 문자열에서 특정 문자가 마지막으로 등장하는 위치의 인덱스를 반환함.
int lastIndexOf(int ch, int fromIndex) 해당 문자열에서 특정 문자가 전달된 인덱스 이후에 마지막으로 등장하는 위치의 인덱스를 반환함.
String[] split(String regex) 해당 문자열을 전달된 정규 표현식(regular expression)에 따라 나눠서 반환함.
String substring(int beginIndex) 해당 문자열의 전달된 인덱스부터 끝까지를 새로운 문자열로 반환함.
String substring(int begin, int end) 해당 문자열을 전달된 정규 표현식(regular expression)에 따라 나눠서 반환함.
String toLowerCase() 해당 문자열의 모든 문자를 소문자로 변환함.
String toUpperCase() 해당 문자열의 모든 문자를 대문자로 변환함.
String trim() 해당 문자열의 맨 앞과 맨 뒤에 포함된 모든 공백 문자를 제거함.
length() 해당 문자열의 길이를 반환함.
isEmpty() 해당 문자열의 길이가 0이면 true를 반환하고, 아니면 false를 반환함.

※ 참조

https://docs.oracle.com/javase/7/docs/api/java/lang/package-summary.html

 

java.lang (Java Platform SE 7 )

Interface Summary  Interface Description Appendable An object to which char sequences and values can be appended. AutoCloseable A resource that must be closed when it is no longer needed. CharSequence A CharSequence is a readable sequence of char values.

docs.oracle.com

 

'JAVA' 카테고리의 다른 글

Java - 문자열 분리(StringTokenizer)  (0) 2022.05.29
자료구조 - 스택(Stack)  (0) 2022.05.26
Java - 배열(array)  (0) 2022.05.22
Java - 변수(variable)  (0) 2022.05.22
Java - 타입(Type)  (0) 2022.05.19

+ Recent posts