[JAVA] 문자열

이가영·2023년 11월 23일
0

JAVA

목록 보기
8/12

String클래스의 메소드로 문자열 다루기

int length()

-> 현재 문자열의 길이 값을 반환

String a1 = "ABC";
System.out.println(a1, length());
[실행결과]
3

String toUpperCase(), String toLowerCase()

-> 현재 문자열을 전부 대문자, 소문자로 반환

String a1 = "abcABC";
System.out.println(a1.toUpperCase());
System.out.println(a1.toLowerCase());
[실행결과]
ABCABC
abcabc

Boolean contains

-> 현재 문자열에 매개변수 s의 문자열이 포함되어 있는지 여부를 검사 후 결과를 반환

  • 포함되어 있으면 true
  • 포함되어 있지 않으면 false
String a1 = "APPLE";
System.out.println(a1.contains("A"));
System.out.println(a1.contains("a"));
System.out.println(a1.contains("Z"));
[실행결과]
true
false
false

int indexOf(String str)

-> 현재 문자열내에 있는 첫번째 str 문자열의 시작위치를 찾아서 그 결과값을 반환합니다. fromIndex를 사용하면 해당 인덱스의 위치에서부터 검색을 시작

  • 포함되어 있으면 : 해당위치의 index값
  • 포함되어 있지 않으면 : -1
String s1 = "ABCDE-ABCDE";
System.out.print(s1.indexOf("D") + ", ");
System.out.print(s1.indexOf("d") + ", ");
System.out.print(s1.indexOf("Z") + ", ");
System.out.print(s1.indexOf("DE"));
System.out.printf("%n--------------%n");
System.out.print(s1.indexOf("D",2) + ", ");
System.out.print(s1.indexOf("D",3) + ", ");
System.out.print(s1.indexOf("D",4) + ", ");
System.out.print(s1.indexOf("D",5) + ", ");
System.out.print(s1.indexOf("D",10));
[실행결과]
3, -1, -1, 3
--------------
3, 3, 9, 9, -1

int lastIndexOf(String str)

-> 현재 문자열내에 있는 마지막 str 문자열의 시작위치를 찾아서 그 결과값을 반환합니다. fromIndex를 사용하면 해당 인덱스의 위치에서부터 거꾸로 검색을 시작

  • 포함되어 있으면 : 해당위치의 index값
  • 포함되어 있지 않으면 : -1
String s1 = "ABCDE-ABCDE";
System.out.print(s1.lastIndexOf("D") + ", ");
System.out.print(s1.lastIndexOf("d") + ", ");
System.out.print(s1.lastIndexOf("Z") + ", ");
System.out.print(s1.lastIndexOf("DE"));
System.out.printf("%n--------------%n");
System.out.print(s1.lastIndexOf("D",2) + ", ");
System.out.print(s1.lastIndexOf("D",3) + ", ");
System.out.print(s1.lastIndexOf("D",4) + ", ");
System.out.print(s1.lastIndexOf("D",5) + ", ");
System.out.print(s1.lastIndexOf("D",10));
[실행결과]
9, -1, -1, 9
--------------
-1, 3, 3, 3, 9

boolean startsWith(String prefix)

-> 현재 문자열이 prefix 문자열로 시작하는지 검사 후 결과를 반환합니다. toffset을 사용할 경우 해당 숫자 만큼 건너뛴후 검사를 진행

  • 포함되어 있으면 : true
  • 포함되어 있지 않으면 : false
String s1 = "HelloJavaWorld";
System.out.println(s1.startsWith("Hello"));
System.out.println(s1.startsWith("hello"));
System.out.println(s1.startsWith("Java"));
System.out.println(s1.startsWith("Java", 5));
[실행결과]
true
false
false
true

 boolean endsWith(String suffix)

-> 현재 문자열이 suffix 문자열로 끝나는 검사후 결과를 반환

  • 포함되어 있으면 : true
  • 포함되어 있지 않으면 : false
String s1 = "HelloJavaWorld";
System.out.println(s1.endsWith("World"));
System.out.println(s1.endsWith("world"));
System.out.println(s1.endsWith("Java"));
[실행결과]
true
false
false

연습문제

package chap_03;

public class _01_String1 {
    public static void main(String[] args) {
        String s = "I like Java and Python and C.";
        System.out.println(s);

        // 문자열의 길이
        System.out.println(s.length()); // 29

        // 대소문자 변환
        System.out.println(s.toUpperCase()); // 대문자로
        System.out.println(s.toLowerCase()); // 소문자로

        // 포함 관계
        System.out.println(s.contains("Java")); // 포함된다면 true
        System.out.println(s.contains("C#")); // 포함되지 않는다면 false
        System.out.println(s.indexOf("Java")); // 위치 정보 7
        System.out.println(s.indexOf("C#")); // 포함되지 않는다면 -1
        System.out.println(s.indexOf("and")); // 처음 일치하는 위치 정보 (12)
        System.out.println(s.lastIndexOf("and")); // 마지막 일치하는 위치 정보 (23)
        System.out.println(s.startsWith("I like")); // 이 문자열로 시작하면 true (아니면 false)
        System.out.println(s.endsWith(".")); // 이 문자열로 끝나면 true (아니면 false)
    }
}


String replace(CharSequence target, CharSequence replacement)

-> 현재 문자열에 있는 target문자열을 replacement 문자열로 변경하여 반환

String s1 = "A+B+C+D+E";
System.out.println(s1.replace("+", "-"));
[실행결과]
A-B-C-D-E

String substring(int beginIndex)

-> 현재 문자열의 beginIndex 위치부터 마지막까지 문자열을 반환합니다. endIndex를 사용하면 beginIndex부터 endIndex - 1 까지의 문자열을 반환

String s1 = "ABCDEFG";
System.out.println(s1.substring(2));
System.out.println(s1.substring(2,4));
[실행결과]
CDEFG
CD

※주의
-> s 변수에 변환 결과가 반영되는 것은 아니다.
s = s.substring(7);
ㄴ이렇게 해야 변환 결과가 s변수에 반영된다.


연습문제

package chap_03;

public class _02_String2 {
    public static void main(String[] args) {
        String s = "I like Java and Python and C.";

        // 문자열 변환
        System.out.println(s.replace(" and", ",")); // " and" 를 "," 로 변환
        System.out.println(s.substring(7)); // 인덱스 기준 7 부터 시작 (이전 내용은 삭제)
        System.out.println(s.substring(s.indexOf("Java")));
        // "Java" 가 시작하는 위치부터, "." 이 시작하는 위치 바로 앞까지
        System.out.println(s.substring(s.indexOf("Java"), s.indexOf("."))); // 시작 위치부터 끝 위치 "직전" 까지

        // 공백 제거
        s = "        I love Java.      ";
        System.out.println(s);
        System.out.println(s.trim()); // 앞뒤 공백 제거

        // 문자열 결합
        String s1 = "Java";
        String s2 = "Python";
        System.out.println(s1 + s2); // JavaPython
        System.out.println(s1 + "," + s2); // Java,Python
        System.out.println(s1.concat(",").concat(s2)); // Java,Python
    }
}


문자열 비교

boolean equals(Object anObject)

-> 두 문자열이 같은지 여부를 비교한 후 그 결과를 반환

  • 포함되어 있으면 : true
  • 포함되어 있지 않으면 : false
String s1 = "ABC";
System.out.println(s1.equals("ABC"));
System.out.println(s1.equals("abc"));
System.out.println(s1.equals("XYZ"));
[실행결과]
true
false
false

boolean equalsIgnoreCase(String anotherString)

-> 대소문자의 구분없이 두 문자열이 같은지 여부를 비교한 후 그 결과를 반환

  • 포함되어 있으면 : true
  • 포함되어 있지 않으면 : false
String s1 = "ABC";
System.out.println(s1.equalsIgnoreCase("ABC"));
System.out.println(s1.equalsIgnoreCase("abc"));
System.out.println(s1.equalsIgnoreCase("XYZ"));
[실행결과]
true
true
false

int compareTo(String anotherString)

-> 두 문자열을 사전 순으로 비교한 결과를 반환

  • 두 문자열이 같을 경우 : 0
  • 현재 문자열이 anotherString 문자열보다 먼저인 경우 : 음수(-)
  • 현재 문자열이 anotherString 문자열보다 나중인 경우 : 양수(+)
String s1 = "E";
System.out.println(s1.compareTo("A"));
System.out.println(s1.compareTo("a"));
System.out.println(s1.compareTo("E"));
System.out.println(s1.compareTo("e"));
System.out.println(s1.compareTo("Z"));
System.out.println(s1.compareTo("z"));
[실행결과]
4
-28
0
-32
-21
-53

연습문제

package chap_03;

public class _03_StringCompare {
    public static void main(String[] args) {
        // 문자열 비교
        String s1 = "Java";
        String s2 = "Python";

        System.out.println(s1.equals("Java")); // 문자열 내용이 같으면 true, 다르면 false

        // 대소문자 구분 없이 문자열 내용이 같은지 여부 체크
        System.out.println(s2.equalsIgnoreCase("python"));

        // 문자열 비교 심화
        s1 = "1234"; // 벽에 붙은 메모지의 비밀번호 정보 (참조)
        s2 = "1234";
        // s1과 s2는 같은 곳을 참조한다.
        System.out.println(s1.equals(s2)); // true (내용 비교)
        System.out.println(s1 == s2); // true (참조하는 곳 비교)

        s1 = new String("1234"); //메모지에 저장
        s2 = new String("1234"); //또 다른 메모지에 저장
        //이 두 메모지는 서로 다른 것이다.(서로 다른 곳에 데이터 저장)
        // 1234라는 메모지는 하나만 있고 메모지의 값을 s1과 s2라는 string 변수(문자열 변수)가 참조하는 것이다.
        System.out.println(s1.equals(s2)); // true -> 내용이 같으니까
        System.out.println(s1 == s2); // false -> 등호를 이용할 때는 서로 다른 메모리 공간에 각각 존재하는 데이터니까
        
    }
}


특수 문자(Escape Sequence)

-> 문자열을 사용할 때 어떤 약속이 되어 있는 특별한 기능을 하는 문자


연습문제

package chap_03;

public class _04_EscapeSequence {
    public static void main(String[] args) {
        // 특수문자, 이스케이프 문자 (Escape Sequence, Escape Character, Special Character)
        // \n \t \\ \" \'
        System.out.println("자바가");
        System.out.println("너무");
        System.out.println("재밌어요");

        // \n : 줄바꿈
        System.out.println("자바가\n너무\n재밌어요");

        // \t : 탭
        // 해물파전     9000원
        // 김치전      8000원
        // 부추전      8000원
        System.out.println("해물파전\t\t9000원");
        System.out.println("김치전\t\t8000원");
        System.out.println("부추전\t\t8000원");

        // \\ : 역슬래시
        System.out.println("C:\\Program Files\\Java");

        // \" : 큰따옴표
        // 단비가 "냐옹" 이라고 했어요
        System.out.println("단비가 \"냐옹\" 이라고 했어요");

        // \' : 작은따옴표
        // 단비가 '뭘 봐?' 라는 표정을 지었어요
        System.out.println("단비가 \'뭘 봐?\' 라는 표정을 지었어요");
        System.out.println("단비가 '뭘 봐?' 라는 표정을 지었어요");

        char c = 'A';
        c = '\'';
        System.out.println(c);
    }
}


Quiz

Q. 주민등록번호에서 생년월일 및 성별까지만 출력하는 프로그램을 작성

참고

  • 주민등록변호는 13자리의 숫자로 구성
  • 앞 6자리는 생년월일 정보, 뒷 7자리 중 첫 번째 숫자는 성별 정보
  • 입력 데이터는 -을 포함한 14자리의 문자열 형태

예시

  • "901231-1234567"인 경우 901231-1까지 출력
  • "030708-4567890"인 경우 030708-4까지 출력


profile
gy’s portfolio

0개의 댓글