상세 컨텐츠

본문 제목

[JAVA] String Class - 01

JAVA Language

by mobile 2012. 7. 27. 02:01

본문

반응형

1. 문자열(String)의 생성방법

  • JAVA에서 문자열은 워낙 많이 쓰이기 때문에 String str = "aaa"; 와 같이 "" 을 이용해서 기본 자료형처럼 선언할 수 있습니다.
  • Java에서 문자열은 엄연히 API에서 제공하는 클래스 이므로 객체 자료형 처럼 String str = new String("aaa");로 선언 하는 것도 가능합니다.


2. String 클래스의 주요 메소드

: 문자열은 객체이므로 String 클래스에서 생성된 객체 입니다. 따라서 String 클래스 안에 선언된 메소드를 적용해 볼 수 있습니다.


  • concat(추가 문자열) : 문자열을 연결할 때
  • substring(자르기 시작할 위치, 자르고 싶은 길이) : 문자열을 자르고 싶을 때
  • length() : 문자열의 길이를 알고 싶을 때
  • toUpperCase(): 문자열을 영어의 대문자로 만들고 싶을 때
  • toLowerCase() : 문자열을 소문자로 만들고 싶을 때
  • charAt(위치) : 문자열 중에서 특정한 위치의 글자를 찾고 싶을 때
  • indexOf(찾고자 하는 문자열) : 자신의 원하는 특정 문자열의 위치
  • equals(비교 대상 문자열) : 다른 문자열과의 내용의 비교
  • trim() : 문자열 뒤에 있는 공백을 제거하고자 할 때
  • replace(바꾸고자 하는 char, 변환될 char) : 문자열 내에서 특정 글자를 바꿀 때 사용한다.
  • replaceAll(변환하고자 하는 문자열, 변환될 문자열) : 문자열 내에 특정 부분을 다른 문자열로 변환하고자 할 때 사용

▶ 문자열의 결합
: 문자열을 합쳐서 새로운 문자열을 만들 때는 '+' 연산자를 이용하면 되지만, concat() 메소드도 마찬가지 역할을 합니다.
public class StringClassTest {

public static void main(String[] args) {
String str1 = "AAA";
String str2 = "BBB";
String str3 = str1 + str2;
String str4 = str1.concat(str2);
System.out.println(str3);
System.out.println(str4);
}
}

결과
AAABBB
AAABBB


▶ 문자열에서 특정 위치의 글자 가져오기

: charAt()은 글자 내에서 특정 위치의 글자를 char로 반환해 줍니다.

String str = "ABCDE";

char ch0 = str.charAt(0); // 맨앞의 글자인 A를 반환


▶ 문자열의 길이는 length()

public class StringClassTest {


public static void main(String[] args) {

    // length()와 charAt()을 이용한 글자 출력

String str = "ABCDE";

int len = str.length();


for (int i = 0; i < len; i++) {

System.out.println(str.charAt(i));

}

}

}


결과

A

B

C

D

E


▶ 특정 문자의 위치를 찾아내는 indexof()

- 결과가 0 이상이면 원하는 대상이 문자열에 있다는 것을 의미

- 결과가 -1이면 배열의 인덱스 번호가 -1이 나올 수 없다고 기억하면 됩니다.


▶ 문자열을 자라는 substring()

- substring(int index) : 해당 index 번호에서 부터 자른다.

- substring(int start, int end) : 해당 start 위치에서, end 직전까지 자른다.


▶ 문자열의 내용이 같은지를 비교하는 equals()

: 다른 문자열과 내용물이 일치하는지를 boolean으로 알려 줍니다.


 문자열의 equals()와 '==' 는 다르다

'==' 연산자의 의미

- 기본 자료형일 경우에는 변수 안의 내용물을 비교한다.

- 객체 자료형일 경우에는 변수 안의 레퍼런스가 같은곳을 가리키는지를 비교한다.


public class StringClassTest {


public static void main(String[] args) {

Scanner s1 = new Scanner(System.in);

Scanner s2 = s1;

System.out.println(s1 == s2);

}

}

결과

true

: 객체 자료형일 경우에 동일한 객체를 가리키는지를 비교하므로 true


public class StringClassTest {


public static void main(String[] args) {

String str1 = new String("AAA");

String str2 = new String("AAA");

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

}

}

결과

false

: new라는 키워드는 메모리에 새로운 공간을 할당하는 역할을 합니다. 즉, 위의 str1과 str2는 메모리에서 전혀 다른 객체를 의미합니다. 즉 str1,str2라는 변수에 담긴 레퍼런스들은 각자 다른 문자열을 의미하고 있습니다. 결국 결과는 false


public class StringClassTest {


public static void main(String[] args) {

String str1 = "AAA";

String str2 = "AAA";

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

}

}

결과

true

: 기본형 처럼 문자열을 선언했을 경우 문자열 자체는 char[]로 만들어 지며 JAVA는 같은 문자열은 메모리상에 한번만 만들어 두고, 같은 문자열를 의미 할때는 같은 메모리 위치를 가리키도록 설계 되었습니다. 그러므로 위의 비교는 true.


▶ 문자열의 법칙

- 같은 내용의 문자열 객체는 한번만 만들어 진다.

- 문자열이 변경되면 새로운 객체로 다시 만들어낸다(불변, Immutable)


public class StringClassTest {


public static void main(String[] args) {

String str1 = "ABCDE";

String str2 = str1.substring(3);

//str1에 대해서 잘라내기 작업후에도 아무 변화가 없다.

System.out.println("str1 : " + str1);

System.out.println("str2 : " + str2);

}

}

결과

str1 : ABCDE

str2 : DE


public class StringClassTest {


public static void main(String[] args) {

String str1 = "ABCDE";

String str2 = str1; // 복사하였으므로 같은 문자열

str1 = str1 + "zzzz"; //str1을 일방적으로 변경

System.out.println(str1);

System.out.println(str2);

}

}

결과

ABCDEzzzz

ABCDE


▶ 문자열과 배열

: 문자열을 char[] 혹은 byte[]로 변형할 수 있습니다.

import java.util.Arrays;


public class StringClassTest {


public static void main(String[] args) {

String str = "한글은";

char[] arr1 = str.toCharArray();

System.out.println(Arrays.toString(arr1));

byte[] arr2 = str.getBytes();

System.out.println(Arrays.toString(arr2));

}

}


결과

[한, 글, 은]

[-19, -107, -100, -22, -72, -128, -20, -99, -128]


반응형

관련글 더보기

댓글 영역