Java String 클래스

I C-AN·2021년 7월 22일
0

Java

목록 보기
13/26

String 클래스

String a = "Hello";
String b = "World";

a = a + b; // 문자열 합치기
System.out.println(a); // Hello World

문자열을 위한 클래스char[] + 메서드로 이루어져 있다

  • 클래스이지만 new 키워드 없이 사용할 수 있다
  • 값을 읽기만 할 수 있고 내용을 변경할 수 없는 불변 객체이다
  • 기존 문자열을 변경하면 새로운 String 인스턴스가 생성되어 다른 주소를 가리키게 된다
    • 문자열의 결합이나 변경이 잦다면 StringBuffer를 사용

문자열 비교

String str1 = "abc"; // "abc"의 주소가 str1에 저장
String str2 = "abc"; // "abc"의 주소가 str2에 저장
String str3 = new String("abc"); // 새로운 String 인스턴스를 생성
String str4 = new String("abc");

// 비교
str1 == str2 ? true
str1.equals(str2) ? true

str3 == str4 ? false
str3.equals(str4) ? true
  • str1과 str2가 같은 문자열의 주소를 공유한다
  • new 키워드로 생성한 str3과 str4는 각각 다른 문자열의 주소를 참조한다
  • 문자열의 값을 비교할 땐 equals를 이용한다

문자열 리터럴

String s1 = "AAA";
String s2 = "AAA";
String s3 = "BBB";
  • 문자열 리터럴은 프로그램 실행 시 자동으로 생성된다 (constant pool에 저장)
    • 그래서 new 키워드 없이 생성할 수 있다
  • 같은 내용의 문자열 리터럴은 하나만 만들어진다
    • s1, s2는 같은 문자열 객체를 가리키게 된다

빈 문자열

// 길이가 0인 char형 배열을 저장하는 문자열
String str = ""; // str을 빈 문자열로 초기화

// 길이가 0인 배열은 어느 타입이나 생성 가능
char[] chArr = new char[0];
int[] iArr = {};

// 기본값
String s = null;
char c = '\u0000';

// 초기화
String s = ""; // 빈 문자열로 초기화
char c = ' '; // 공백으로 초기화

문자와 문자열을 초기화 할 때 빈 문자열, 공백으로 생성하는 것이 좋다

String 생성자와 메서드

String(char[] value)

// String(char[] value)
char[] c = { 'H', 'e', 'l', 'l', 'o' };
String s = new String(c); // Hello

주어진 문자열(value)를 갖는 String 인스턴스를 생성한다

String(StringBuffer buf)

// String(StringBuffer buf)
StringBuffer sb = new StringBuffer("Hello");
String s = new String(sb); // Hello

StringBuffer 인스턴스가 갖고 있는 문자열과 같은 내용의 String 인스턴스를 생성한다
StringBuffer는 String과는 다르게 내용을 변경 가능하다

charAt()

// char charAt(int index)
String s = "Hello";
String n = "012345";
char c = s.charAt(1); // e
char c2 = n.charAt(1); // 1

지정된 index에 있는 문자 하나를 반환한다

compareTo()

// int compareTo(String str)
int i = "aaa".compareTo("aaa"); // 0
int i2 = "bbb".compareTo("aaa"); // 1

문자열과 사전순서로 비교하며 주로 정렬할 때 사용하는 함수
같으면 0, 사전순으로 이전이면 음수, 이후면 양수를 반환한다

concat()

// String concat(String str)
String s = "Hello";
String s2 = s.concat(" World"); // Hello World

문자열을 뒤에 덧붙인다

contains()

// boolean contains(CharSequence s)
String s = "abcde";
boolean b = s.contains("bc"); // true

지정된 문자열이 포함되었는지 검사하고 boolean 타입으로 반환한다

endsWith(), startsWith()

// boolean endsWith(String suffix)
String file = "java.lang.Object";
boolean b = file.endsWith("Object"); // true

// boolean startsWith(String suffix)
boolean b2 = file.startsWith("java"); // true
boolean b3 = file.startsWith("lang"); // false

endsWith()는 지정된 문자열로 끝나는지 검사하고 boolean 타입으로 반환한다
반대로 startsWith()는 지정된 문자열로 시작하는지 검사한다

equals()

// boolean equals(Object obj)
String s = "Hello";
boolean b = s.equals("hello"); // false

매개변수로 받은 문자열과 String 인스턴스의 문자열의 값을 비교한다
boolean 타입으로 반환하며 동등연산자 == 대신 사용하도록 하자

equalsIgnoreCase()

// boolean equalsIgnoreCase(String str)
String s = "Hello";
boolean b = s.equalsIgnoreCase("HELLO"); // true

equals()와 같은 기능을 하는 함수이며 대소문자 구분없이 비교한다

indexOf()

// int indexOf(int ch)
String s = "Hello";
int idx1 = s.indexOf('o'); // 4
int idx2 = s.indexOf('k'); // -1

// int indexOf(int ch, int pos)
int idx3 = s.indexOf('e', 0); // 1
int idx4 = s.indexOf('e', 2); // -1

// int indexOf(String str)
int idx5 = s.indexOf("lo"); // 3

주어진 문자가 문자열에 존재하는지 확인하고 위치를 정수값으로 반환한다
값이 없으면 -1를 반환한다 (index는 0부터 시작)
매개변수로 정수를 입력하면 검색 시작 위치로 사용되며 해당 위치부터 확인한다
문자열을 매개변수로 받을 수도 있다

join()

// static String join(CharSequence delimiter, CharSequence e)
Stirng animals = "dog,cat,pig";
String[] arr = animals.split(","); 
String str = String.join("-", arr); // dog-cat-pig

배열을 매개변수로 받은 구분자를 이용해 새로운 문자열로 반환한다

lastIndexOf()

// int lastIndexOf(int ch)
String s = "java.lang.Object";
int idx1 = s.lastIndexOf('.'); // 9
int idx2 = s.indexOf('.'); // 4

// int lastIndexOf(String str)
int idx3 = s.lastIndexOf("java"); // 10
int idx4 = s.indexOf("java"); // 0

지정된 문자 또는 문자코드를 문자열의 오른쪽 끝에서부터 찾아서 위치를 반환한다
매개변수로 문자열을 입력할 수 있다

length()

// int length()
String s = "Hello";
int length = s.length(); // 5

문자열의 길이를 정수값으로 반환한다

replace(), replaceAll()

// String replace(char old, char new)
String s = "ABCDE";
String s2 = s.replace('A', 'Z'); // ZBCDE

// String replaceAll(String regex, String new)
String s = "Hello World";
String s2 = s.replaceAll("Hello", "Java"); // Java World

split()

// String[] split(String regex)
String animals = "dog,cat,pig";
String[] arr = animals.split(","); // [0] = dog, [1] = cat, [2] = pig

// String[] split(String regex, int limit)
String[] arr2 = animals.split(",", 2); // [0] = dog, [1] = cat,pig

문자열을 지정된 분리자(정규표현식)를 기준으로 나누어 문자열 배열에 담아 반환한다
분리자 뒤에 정수를 입력 받으면 문자열 전체를 지정된 정수만큼 나눈다

substring()

// String substring(int begin, int end)
String s = "java.lang.Object";
String c = s.substring(10); // Object
String p = s.substring(5, 9); // lang

주어진 시작위치부터 끝 위치 범위에 포함된 문자열을 반환한다
이 때 시작위치는 포함되지만 끝 위치는 포함되지 않는다 (시작 <= x < 끝)
끝 위치는 생략할 수 있다

toLowerCase(), toUpperCase()

// String toLowerCase()
String s = "Hello";
String s1 = s.toLowerCase(); // hello
// String toUpperCase()
String s2 = s.toUpperCase(); // HELLO

String 인스턴스에 저장되어있는 모든 문자열을 소문자, 대문자로 변환하여 반환한다

trim()

// String trim()
String s = "     Hello World     ";
String s1 = s.trim(); // Hello World

문자열의 왼쪽 끝과 오른쪽 끝의 공백을 없앤 결과를 반환한다
이 때 문자열 중간의 공백은 제거되지 않는다

valueOf()

// static String valueOf(datatype)
String b = String.valueOf(true); // true
String d = String.valueOf(10.0); // 10.0

java.util.date dd = new java.util.Date();
String Date = String.vlaueOf(dd); // date = "Wed Jan 27 ..."

지정된 값을 문자열로 변환하여 반환한다
참조변수의 경우 toString()을 호출한 결과를 반환한다

문자열과 기본형 간의 변환

  1. 숫자를 문자열로 바꾸는 방법
int i = 100;
String str1 = i + "";
String str2 = String.valueOf(i);
  1. 문자열을 숫자로 바꾸는 방법
int i = Integer.parseInt("100");
int i2 = Integer.valueOf("100");
profile
할 수 있다

0개의 댓글