Java String - 메소드 살펴보기

String 클래스는 문자열을 편리하게 다루기 위한 메소드를 제공한다.
기능이 매우 많으므로 필요한 메소드만 사용하고 그 외의 필요하거나 API 문서로 원하는 메소드를 찾는 것이 좋다.


문자열 정보 조회

  • length(): 문자열 반환
  • isEmpty(): 문자열 비었는지 확인 (공백(Whitespace)만 있는 경우 false 반환)
  • isBlank(): 문자열 비었는지 확인 (공백(Whitespace)만 있는 경우 true 반환)
  • charAt(int index): 지정한 인덱스에 문자를 반환

문자열 비교

  • equlas(Object anObject): 두 문자열이 동일한지 비교
  • equalsIgnoreCase(String anotherString): 두 문자열 대소문자 구별없이 비교
  • compareTo(String anotherString): 두 문자열 사전적 비교
    • 숫자 비교인 경우 반환 값: 1(크다), 0(같다), -1(작다)
    • 문자열인 경우 반환 값(ASCII 변환하면 이해할 수 있다.): "a".compareTo("c") 계산하면 2 반환함. ascii 변환 시 a(61), c(63) 숫자이며 61-63 계산한것과 같음.
  • compareToIgnoreCase(String str): 두 문자열 대소문자 구별없이 사전적 비교
  • startsWith(String prefix): 문자열 특정 접두사로 시작하는지 확인
  • endsWith(String suffix): 문자열이 특정 접미사로 끝났는지 확인

문자열 검색

  • contains(CharSequence s): 문자열이 특정 문자열을 포함하고 있는지 확인
  • indexOf(String ch): 문자열 처음 등장하는 위치 인덱스 반환
  • indexOf(String ch, int fromIndex): 문자열 처음 등장하는 위치 인덱스 반환
  • lastIndexOf(String ch): 문자열 마지막 위치 인덱스 반환

문자열 조작 및 변환

  • substring(int beginIndex): 전체 문자열 중 인수의 인덱스부터 문자열을 반환
  • substring(int beginIndex, endIndex): 전체 문자열의 인덱스부터 문자열을 반환
  • concat(String str): 문자열 끝에 다른 문자열 붙여서 반환
  • replace(CharSequence target, CharSequence replacement): 특정 문자열을 새 문자열로 변환하여 반환
  • replaceAll(String regex, String replacement): 문자열을 정규표현식과 일치하는 것을 새 문자열로 변환하여 반환
  • toLowerCase(): 문자열을 소문자 변환하여 반환
  • toUpperCase(): 문자열을 대문자로 변환하여 반환
  • trim(): 문자열 양 끝의 공백(Whitespace) 제거하여 반환
  • strip(): 유니코드 공백 Whitespace 포함해서 제거하여 반환

문자열 분할 및 조합

  • split(String regex): 문자열을 정규 표현식으로 분할하여 반환
  • join(CharSequence delimiter, CharSequence... elements): 구분자 기준으로 결합하기

기타 유틸리티

  • valueOf(Object obj): 다양한 타입을 문자열로 반환
  • toCharArray(): 문자열을 배열로 반환
  • format(String format, Object... args): 문자열과 인자를 사용한 새로운 문자열을 생성
  • matches(String regex): 문자열이 정규표현식과 일치하는지 확인
💡
CharSequence 타입은 String, StringBuilder 상위 타입이다. 문자열 처리에 다양한 객체로 받을 수 있도록 한다.


String 조회 메소드 - 실습

  • length(): 문자열 반환
  • isEmpty(): 문자열 비었는지 확인 (공백(Whitespace)만 있는 경우 false 반환)
  • isBlank(): 문자열 비었는지 확인 (공백(Whitespace)만 있는 경우 true 반환)
  • charAt(int index): 지정한 인덱스에 문자를 반환

int Length()

String str = "Java String";
System.out.println("문자열 길이: " + str.length());

bool isEmpty()

String str = "Java String";
System.out.println("문자열이 비어 있었는가: " + str.isEmpty());

bool isBlank()

String str = "Java String";
System.out.println("문자열이 비어 있거나 공백인가: " + str.isBlank());

false
isBlank 메소드는 "Java String" 문자가 있으므로 fasle 값으로 반환한다.


String str = "Java String";
System.out.println("문자열이 비어 있거나 공백인가: " + " ".isBlank());

true
" " 공백만 있는 문자열인 경우 Blank 가 맞으므로 true 값으로 반환한다.


char charAt(int index)

String str = "Java String";
System.out.println("문자열이 비어 있거나 공백인가: " + str.charAt(5));

S
문자열 "Java String" 5번 이동하여 값("S") 반환한다.



String 비교 메소드 - 실습

  • equlas(Object anObject): 두 문자열이 동일한지 비교
  • equalsIgnoreCase(String anotherString): 두 문자열 대소문자 구별없이 비교
  • compareTo(String anotherString): 두 문자열 사전 순으로 비교
  • compareToIgnoreCase(String str): 두 문자열 대소문자 구별없이 사전 순으로 비교
  • startsWith(String prefix): 문자열 특정 접두사로 시작하는지 확인
  • endsWith(String suffix): 문자열이 특정 접미사로 끝났는지 확인

bool equlas(Object anObject)

String str1 = "Java, Apple";
String str2 = "java, apple";
System.out.println(str1.equals(str2));

false


bool equlasIgnoreCase(String anotherString)

String str1 = "Java, Apple";
String str2 = "java, apple";
System.out.println(str1.equalsIgnoreCase(str2));

true


int compareTo(String anotherString)

System.out.println("a".compareTo("b"));

-1


System.out.println("b".compareTo("a"));

1


System.out.println("a".compareTo("b"));

2


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

32


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

0


bool startsWith(String prefix)


String str1 = "Java, Apple";
System.out.println(str1.startsWith("Java"));

true

String str1 = "Java, Apple";
System.out.println(str1.startsWith("va", 2));

true


endsWith(String suffix)

String str1 = "Java, Apple";
System.out.println(str1.endsWith("Apple"));

true



String 검색 - 실습

  • contains(CharSequence s): 문자열이 특정 문자열을 포함하고 있는지 확인
  • indexOf(String ch): 문자열 처음 등장하는 위치 인덱스 반환
  • indexOf(String ch, int fromIndex): 문자열 처음 등장하는 위치 인덱스 반환
  • lastIndexOf(String ch): 문자열 마지막 위치 인덱스 반환

boolean contains(CharSequence s)

String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.contains("Java"));

true


int indexOf(String ch)

String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.indexOf("Hello"));

4


int indexOf(String ch, int fromIndex)

String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.indexOf("Hello"), 11);

22


int lastIndexOf(String ch)

String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.lastIndexOf("Hello"));

22



String 조작 및 변환 - 실습

  • substring(int beginIndex): 전체 문자열 중 인수의 인덱스부터 문자열을 반환
  • substring(int beginIndex, endIndex): 전체 문자열의 인덱스부터 문자열을 반환
  • concat(String str): 문자열 끝에 다른 문자열 붙여서 반환
  • replace(CharSequence target, CharSequence replacement): 특정 문자열을 새 문자열로 변환하여 반환
  • replaceAll(String regex, String replacement): 문자열을 정규표현식과 일치하는 것을 새 문자열로 변환하여 반환
  • toLowerCase(): 문자열을 소문자 변환하여 반환
  • toUpperCase(): 문자열을 대문자로 변환하여 반환
  • trim(): 문자열 양 끝의 공백(Whitespace) 제거하여 반환
  • strip(): Whitespace 포함한 유니코드 공백 제거하여 반환
  • strip.Leading(): 첫 문자열부터 Whitespace 포함한 유니코드 공백 제거하여 반환
  • stripTrailing(): 마지막 문자열부터 Whitespace 포함한 유니코드 공백 제거하여 반환

String substring(int beginIndex)

String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.substring(11));

Welcome To Hello Java World !!!


String substring(int beginIndex, endIndex)

String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.substring(11, 21));


Welcome To


String concat(String str)

String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.concat("@@@"));

!!! Hello, Welcome To Hello Java World !!!@@@


String replace(CharSequence target, CharSequence replacement)

String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.replace("Hello", "Good"));

!!! Good, Welcome To Good Java World !!!


String replaceFirst(CharSequence target, CharSequence replacement)

String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println(str.replaceFirst("Hello", "Good"));

!!! Good, Welcome To Hello Java World !!!


String toLowerCase()

String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println("Learning Java String".toLowerCase());

learning java string


String toUpperCase()

String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println("Learning Java String".toUpperCase());

LEARNING JAVA STRING


String trim()

String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println("'" + "   공백 좌우 있음   ".trim() + "'");

'공백 좌우 있음'


String strip()

String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println("'" + "   공백 좌우 있음   ".strip() + "'");

'공백 좌우 있음'


String stripLeading()

String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println("'" + "   공백 좌우 있음   ".strip() + "'");

'공백 좌우 있음 '


String stripTrailing()

String str = "!!! Hello, Welcome To Hello Java World !!!";
System.out.println("'" + "   공백 좌우 있음   ".strip() + "'");

' 공백 좌우 있음'



String 분할 및 조합 - 실습

  • split(String regex): 문자열을 정규 표현식으로 분할하여 반환
  • join(CharSequence delimiter, CharSequence... elements): 구분자 기준으로 결합하기

String[] split(String regex)

String str = "Apple|Banana|Orange";
String[] sp = str.split("\\|");
for (String s : sp) {
    System.out.println(s);
}

Apple
Banana
Orange


String join(CharSequence delimiter, CharSequence... elements)

join 메소드 사용 전 이전에는 어떻게 사용했는지 살펴본다.
참고로 split 예제에 사용한 sp 변수가 필요하다.

String str = "Apple|Banana|Orange";
String joinStr = "";
for (int i = 0; i < sp.length; i++) {
    String string = sp[i];
    joinStr += string;
    if (i != sp.length) {
        joinStr += ",";
    }
}

System.out.println("str = " + joinStr);

str= Apple,Banana,Orange


앞서 사용한 코드에서 문자열 끝의 "," 없애는 과정도 필요하며 코드 또한 길어진다.
join 메소드를 사용하여 리팩토링하도록 한다.

String result = String.join(",", sp);
System.out.println("join = " + result);

join = Apple,Banana,Orange



String 기타 - 실습

  • valueOf(Object obj): 다양한 타입을 문자열로 반환
  • toCharArray(): 문자열을 배열로 반환
  • format(String format, Object... args): 문자열과 인자를 사용한 새로운 문자열을 생성
  • matches(String regex): 문자열이 정규표현식과 일치하는지 확인

String valueOf(Object obj)

인자 값으로 Object obj 뿐 아니라 String, Integer, Boolean 등등 여러 가지 인자 값으로 넘길 수 있다.

int n = 200;
boolean b = true;
Object obj = new Object();
String str = "Hello, Java";

// value Of 메소드 사용
String numToString = String.valueOf(n);
System.out.println("숫자의 문자열: " + numToString);

String boolToString = String.valueOf(b);
System.out.println("불리언의 문자열: " + boolToString);

String objToString = String.valueOf(obj);
System.out.println("오브젝트의 문자열 " + objToString);

숫자의 문자열: 200
불리언의 문자열: true
오브젝트의 문자열 java.lang.Object@f6f4d33


valueOf 메소드 특징으로 valueOf 메소드를 사용하지 않아도 더하기(+) 연산자 변수 할당에 문자열(String 타입)이 있다면 알아서 valueOf 동작한다.

int n = 200;
boolean b = true;
Object obj = new Object();
String str = "Hello, Java";

// value Of 메소드 사용
String plusOperation1 = str + b;
System.out.println("Opration \"Hello\" + true: '" + plusOperation1 + "'");
String plusOperation2 = str + obj;
System.out.println("Opration \"Hello\" + obj: '" + plusOperation2 + "'");
String plusOperation3 = n + str;
System.out.println("Opration 200 + \"Hello\": '" + plusOperation3 + "'");

Opration "Hello" + true: 'Hello, Javatrue'
Opration "Hello" + obj: 'Hello, Javajava.lang.Object@3f99bd52'
Opration 200 + "Hello": '200Hello, Java'


char[] toCharArray()

문자열을 배열로 반환한다. 바이트스트림이나 직렬화에 사용하기도 한다.

String str = "Hello, Java";

char[] chars = str.toCharArray();
System.out.println("문자열을 배열 반환: " + chars);
System.out.println(chars);
for (char a : chars) {
    System.out.print(a);
}

문자열을 배열 반환: [C@f6f4d33
Hello, Java
Hello, Java

배열의 참조값을 출력하는 것을 볼 수 있는데,
이것은 println (+) 연산자로 인해 배열 참조값 문자열로 출력한 것이다.


String format(String format, Object... args)

C언어의 printf 함수로 출력하는 것과 유사하다.
format 대신 System.out.printf 대신 사용하여도 동작한다.
(System.out.println 함수로는 안됨!)

int n = 200;
boolean b = true;
Object obj = new Object();
String str = "Hello, Java";

String format1 = String.format("Num: %d, Bool: %b, Obj: %s", n, str, b);
System.out.println(format1);

String format2 = String.format("숫자: %.3f", 10.22222);
System.out.println(format2);

System.out.printf("숫자: %.3f", 10.22222);

Num: 200, Bool: true, Obj: true
숫자: 10.222
숫자: 10.222


Boolean matches(String regex)

정규표현식으로 해당 패턴이 동일한지 확인하는 메소드

String str = "Hello, Java";

String regex = "Hello, (Java|World)";
System.out.println(str.matches(regex));

true