문자열(String)

김수민·2023년 3월 7일
0

백엔드 부트캠프

목록 보기
3/52

String 타입의 변수 선언과 할당

String타입의 변수 선언과 할당

  • 큰따옴표("")로 감싸진 문자열
//문자열 리터럴을 String 타입의 변수 name에 할당하는 방법
String name1 = "King Coding";

//String 클래스의 인스턴스를 생성하는 방법
String name2 = new String("Kim Coding");
  • String 타입의 변수는 String 변수명; 으로 선언할 수 있음
  • 선언한 변수에 문자열을 할당하는 방법
    - 문자열 리터럴을 할당하는 방법 변수 = "문자열";
    - String 클래스의 인스턴스를 생성하여 할당하는 방법 변수 = new String("문자열");
String name1 = "Kim Coding";
String name2 = "Kim Coding";

String name3 = new String("Kim Coding");
String name4 = new String("Kim Coding");

boolean comparsion1 = name1 == "Kim Coding"; 	  //true
booelan comparison2 = name1 == name2; 			  //true
boolean comparison3 = name1 == name3;			  //false
boolean comparison4 = name3 == name4;			  //false
boolean comparison5 = name1.equals("Kim Coding"); //true
boolean comparison6 = name1.equals(name3);		  //true
booelan comparison7 = name3.equals(name4);		  //true
  • == : 좌항의 값과 우항의 값이 일치하면 true, 일치하지 않으면 false

  • equals() : .앞의 변수가 저장하고 있는 문자열의 내용과 () 안의 문자열의 내용이 같은지 비교하여 같으면 true, 다르면 false

  • comparison1
    - name1Kim Coding이라는 문자열 리터럴을 직접 할당받았으며, 비교의 대상이 되는 우항 또한 Kim Coding이라는 내용이 같은 문자열. 문자열 리터럴은 내용이 같다면 같은 주소같을 가지기 때문에 true가 반환됨.

  • comparison2
    - name1name2는 내용이 같은 문자열 리터럴을 직접 할당받은 변수. 두 변수는 같은 문자열의 참조값을 가지므로, true가 반환됨.

  • comparison3
    - name1은 문자열 리터럴을 할당 받은 변수이며, name3은 String 클래스를 통해 인스턴스를 생성하여 할당받은 변수. String 클래스로 인스턴스를 생성하면 항상 별개의 인스턴스가 생성됨. 따라서 name1name3은 다른 주소값을 저장하고 있게 되므로 false가 반환됨.

  • comparison4
    - name3name4는 둘 다 String 클래스로 인스턴스를 생성하여 할당받은 변수. String 클래스로 인스턴스를 생성하면 항상 별개의 인스턴스가 생성되므로 두 변수는 서로 다른 주소값을 저장하게 됨. 결과값으로 false가 반환됨.

  • comparison5
    - equals() 메서드를 활용하여 name1"Kim Coding"의 내용이 같은지 비교. 둘은 참조값도 같고 내용도 같음. equals() 메서드는 내용이 같은지만을 비교함. 따라서 결과값으로 true가 반환됨.

  • comparison6
    -equals() 메서드를 활용하여 name1name3의 문자열 내용이 같은지 비교. name1name3은 참조값이 서로 다르지만 내용은 같음. 따라서 결과값으로 true가 반환됨.

  • comparsion7
    - equals() 메서드를 활용하여 name3name4의 문자열 내용이 같은지 비교. comparison6의 경우와 마찬가지로, name3name4는 서로 다른 참조값을 가지지만, 이 둘이 가리키고 있는 인스턴스의 내용은 같음. 따라서 결과값으로 true가 반환됨.

String 클래스의 메서드

charAt() 메서드

  • 해당 문자열의 특정 인덱스에 해당하는 문자를 반환.
  • 해당 문자열의 길이보다 큰 인덱스나 음수를 전달하면 오류 발생

comparedTo() 메서드

  • 해당 문자열을 인수로 전달된 문자열과 사전 편찬 순으로 비교.
  • 대소문자를 구분하여 비교.
  • 두 문자열이 같다면 0을 반환, 해당 문자열이 인수로 전달된 문자열보다 작으면 음수를, 크면 양수를 반환.
  • 두 문자열을 비교할 때 대소문자를 구문하지 않기를 원한다면 compareToIgnoreCase() 메서드를 사용

concat() 메서드

  • 해당 문자열의 뒤에 인수로 전달된 문자열을 추가한 새로운 문자열을 반환
  • 인수로 전달된 문자열의 길이가 0이면 해당 문자열을 그대로 반환

indexOf() 메서드

  • 해당 문자열에서 특정 문자나 문자열이 처음으로 등장하는 위치의 인덱스를 반환
  • 해당 문자열에 전달된 문자나 문자열이 포함되어 있지 않은 -1을 반환

trim() 메서드

  • 해당 문자열의 맨 앞과 맨 뒤에 포함된 모든 공백 문자를 제거해줌

toLowerCase()와 toUpperCase() 메서드

  • toLowerCase() : 해당 문자열의 모든 문자를 소문자로 변환
  • toUppserCase() : 해당 문자열의 모든 문자를 대문자로 변환

StringTokenizer

  • 문자열을 우리가 지정한 구분자로 문자열을 쪼개주는 클래스
  • 토큰(token): 쪼개어진 문자열
  • 사용하기 위해서는 java.util.StringTokenizer를 import해야 함

자주 사용하는 메서드

  • int countTokens() 남아있는 token의 개수를 반환. 전체 token의 개수가 아닌 현재 남아있는 token의 개수
  • boolean hasMoreElements(), boolean hasMoreTokens() 현재 위치 뒤에 있는 문자열에서 하나 이상의 토큰을 사용할 수 있는 경우 true를 반환하고 그렇지 않으면 false를 반환
  • Object nextElement(), String nextToken() 같은 객체를 반환하지만 반환형이 다름. nextElement는 Object를, nextToken은 String을 반환

StringBuilder / StringBuffer

StringBuilder

StringBuilder의 객체를 생성한 후, append()의 인자로 연결하고자 하는 문자열을 넣어서 StringBuilder의 객체를 통해 호출. 문자를 출력할 때, 변수에 문자열을 할당할 때에는 toString() 메서드를 사용

StringBuffer

인스턴스의 값을 변경하거나 추가할 수 있는 메서드.
내부적으로 버퍼(buffer)라는 이름의 독립적인 공간을 가짐
버퍼 크기의 기본값은 16개의 문자를 지정할 수 있는 크기, 생성자를 통해 그 크기를 별도로 설정할 수 있음

  • append() : 인수로 전달된 값을 문자열로 변환한 후, 해당 문자열의 마지막에 추가. String class의 concat() 메서드와 같은 결과를 반환하지만, 내부적인 속도는 훨씬 빠름.

  • capacity() : StringBuffer 인스턴스의 현재 버퍼 크기를 반환

  • delete() : 전달된 인덱스에 해당하는 부분 문자열을 해당 문자열에서 제거. deleteCharAt() 메서드를 사용하면 특정 위치의 문자 한 개만 제거 가능.

  • insert() : 인수로 전달된 값을 문자열로 변환한 후, 해당 문자열의 지정된 인덱스 위치에 추가. 전달된 인덱스가 해당 문자열의 길이와 같으면 append() 메서드와 같은 결과를 반환.

2개의 댓글

comment-user-thumbnail
2023년 3월 20일

선언한 벼수에 문자열을 할당하는 방법..

1개의 답글