String 메서드

자두·2026년 9월 14일

JAVA

목록 보기
1/8

String 종류

String
│
├─ 길이
│ └─ length()
│ → 몇 글자야?
│
├─ 비교
│ ├─ equals()
│ │ → 내용이 같아?
│ │
│ ├─ equalsIgnoreCase()
│ │ → 대소문자 무시하고 같아?
│ │
│ ├─ compareTo()
│ │ → 문자열 비교 (같으면 0)
│ │
│ └─ compareToIgnoreCase()
│ → 대소문자 무시하고 비교
│
├─ 찾기
│ ├─ indexOf()
│ │ → 처음 어디 있어?
│ │
│ └─ lastIndexOf()
│ → 마지막 어디 있어?
│
├─ 자르기
│ └─ substring()
│ → 어디부터 잘라?
│
├─ 문자 하나
│ └─ charAt()
│ → 몇 번째 글자야?
│
├─ 포함 여부
│ └─ contains()
│ → 이 문자열 들어 있어?
│
├─ 변경
│ └─ replace()
│ → 이걸 저걸로 바꿔
│
├─ 공백
│ └─ trim()
│ → 앞뒤 공백 없애
│
└─ 대소문자 변경
├─ toUpperCase()
│ → 대문자로
│
└─ toLowerCase()
→ 소문자로

length() : 문자열의 길이를 구함

 int len = s1.length();

 System.out.println("len:" + len);
 //"Have a nice day"의 글자 개수
 // 결과  15
  • String 클래스에 있는 메서드
  • 문자열의 길이를 int로 반환

== : 두 문자열 객체가 같은 객체인지 비교

System.out.println(s1 == s2);
//결과 : false
  • String은 객체이기 때문에 s1, s2 변수에는 문자열 자체가 아니라 객체를 가리키는 참조값이 들어 있어.
  • 즉, s1과 s2는 서로 다른 객체. 서로 다른 주소를 가리키고 있고 서로 다른 참조값을 갖고 있음.

equals() : 문자열 내용이 같은지 비교

String a = "hello";
String b = "hello";

a.equals(b);
// 결과 : true

Q.==와 equals()가 왜 다른가?

String s1 = new String("hello");
String s2 = new String("hello");

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

결과

false
true

왜냐하면

  • ==은 s1==s2가 둘이 같은 객체인지를 보는 것. 때문에 같은 내용이더라도 s1와 s2는 다른 객체이기 때문에 false라는 결과가 나옴!!
  • equals는 둘 안에 들어있는 문자열 내용이 같은지를 보는 것.

equalsIgnoreCase() : 대소문자를 무시하고 비교

public class Test {
    public static void main(String[] args) {

        String s1 = "Hello";
        String s2 = "hello";

        boolean result = s1.equalsIgnoreCase(s2);

        System.out.println(result);
        // 대소문자를 무시하기 때문에 Hello와 hello가 같다고 판단!
        // 결과 : true
    }
}

compareTo() : 문자열 비교해서 숫자(int)로 결과 반환

String s1 = "apple";
String s2 = "apple";

int result = s1.compareTo(s2);

System.out.println(result);
//둘이 똑같기 때문에
//결과 : 0
//이런식으로도 사용할 수 있음
if (result == 0) {
    System.out.println("같다");
} else {
    System.out.println("다르다");
}
  • 같으면 : 0
  • 다르면 : 0이 아닌 숫자

compareToIgnoreCase() : 대소문자 무시하고 비교

String s1 = "Hello";
String s2 = "hello";

int result = s1.compareToIgnoreCase(s2);

System.out.println(result);
//대소문자를 무시하면 둘이 같으니까
//결과 : 0

equalsIgnoreCase() vs compareToIgnoreCase()

  • equalsIgnoreCase() : 결과가 true / false
  • compareToIgnoreCase() : 결과가 숫자. 같으면 0, 다르면 0이 아닌 숫자

indexOf() : 처음 위치

String s = "Hello Java";

int result = s.indexOf("Java");

System.out.println(result);

// 문자 위치를 세어봤을 때 J 위치가 6
// java가 6번 위치에서 시작한다!
// 결과 : 6
  • 있음 : 위치
  • 없음 : -1

lastIndexOf() : 마지막 위치

String s = "banana";

System.out.println(s.indexOf("a")); //처음 a 위치
System.out.println(s.lastIndexOf("a")); //마지막 a 위치

// 결과 : 1
         5

substring() : 자르기

String s = "Hello Java";

String result = s.substring(6); // 6번부터 끝까지 가져오기

System.out.println(result);
//결과 : Java

위치를 보면

H e l l o   J a v a
0 1 2 3 4 5 6 7 8 9
            ↑

만약 두 개를 넣으면?

String s = "Hello Java";

String result = s.substring(0, 5);

System.out.println(result);
//결과 : Hello

위치를 보면

0 1 2 3 4 5
H e l l o

substring(0, 5)
↑           ↑
포함        미포함
  • substring(시작, 끝) : 시작은 포함하고, 끝은 포함안함.

charAt() : 특정 위치 문자

String s = "Hello";

char result = s.charAt(1);

System.out.println(result);
// 1번 글자는 e
// 결과 : e
  • charAt(번호) : 해당 위치의 문자 하나 가져오기

contains() : 이거 들어 있어?

String s = "Hello Java";

System.out.println(s.contains("Java"));
// Java가 있으니까
// 결과 : true
  • 포함되어 있으면 : true
  • 포함되어 있지 않으면 : false

replace() : 이것을 저것으로 바꾸기

String s = "Hello Java";

String result = s.replace("Java", "Python");

System.out.println(result);
// java → python
// 결과 : Hello Python
  • replace(기존, 새로운) : 기존 문자열을 새로운 문자열로 변경

trim() : 앞뒤 공백 없애기

String s = "   Hello   ";

String result = s.trim();

System.out.println(result);

//결과 : Hello

but,

String s = "   Hello   Java   ";
// 이 경우 가운데 공백은 그대로 두기
// 결과 : Hello	Java

toUpperCase() / toLowerCase()

String s = "Hello Java";

System.out.println(s.toUpperCase());
System.out.println(s.toLowerCase());
//결과
//HELLO JAVA
//hello java
  • toUpperCase() : 대문자
  • toLowerCase() : 소문자

실제 앱에서는 어떻게 사용될까?

1.투두리스트 앱

String todo = "  자바 공부하기  ";

사용자가 실제로 이렇게 할 일을 입력한다고 했을 때

todo.length();

" 자바 공부하기 "가 몇 글자인지 확인.

할 일 제목은 1~100자까지만 입력해주세요.

실제 앱에서는 같은 입력값 검증에 사용해.

"    자바 공부하기     "

사용자가 실수로 이렇게 입력해도

"자바 공부하기"

실제로 저장할 때는 이렇게 정리되게 만들어 줄 수 있음.

  1. 독서기록 앱
String title = "어린 왕자";

int index = title.indexOf("왕");

"왕"이 시작되는 위치를 알려줌. 검색 기능이나 문자열을 분석할 때 사용할 수 있음.

  1. 가계부 앱
String category = "식비";
String memo = "편의점에서 간식";
String payment = "카카오뱅크";
if (category.equals("식비")) {
    System.out.println("식비 지출입니다.");
}

이때 equals()를 사용해서 이렇게 출력할 수 있음.

식비 → 150,000원
교통 → 80,000원
쇼핑 → 50,000원

그리고 카데고리에 따라 통계도 만들 수 있음.

  1. 회원가입 / 로그인
String id = "bada123";
String password = "abc1234";
if (id.equals(inputId)) {
    System.out.println("아이디가 같습니다.");
}

또 equals()를 사용해서 로그인 과정에서 입력값과 저장된 값을 비교하는 식으로 사용할 수 있음. 다만 실제 비밀번호는 이런 식으로 평문 String을 단순 비교/저장하면 안 되고, 해시 등의 보안 방식을 사용해야 함.

if (password.length() < 8) {
    System.out.println("비밀번호는 8자 이상이어야 합니다.");
}

회원가입할 때 입력값 검증에 사용가능함.

if (password.contains(" ")) {
    System.out.println("비밀번호에 공백을 사용할 수 없습니다.");
}

이런 식으로 입력값을 검사할 수 있음.

그래서 어떻게 공부하면 될까?

단순히 암기만 하려고 하지말고 이 메서드가 실제 기능으로 어떻게 연결되는지 계속 생각하고 실습하면서 공부하면 나중에 Spring 공부할 때도 도움이 될 것.

profile
신입 백엔드 개발자 지망하는 취준생!!!

0개의 댓글