문자열 (String)

  • 문자열은 내부적으로 '클래스'로 구성되어 있다.
  • 내부에는 문자 배열로 된 데이터가 있다. char[]
  • 한번 만든 문자열은 변하지 않는다. (Immutable)// 이뮤테이트
  • 문자열 편집은 String을 쓰지 않고 StringBuilder나 StringBuffer 등을 사용한다.

문자열 생성

  • String 변수명 = "값";을 통해 생성
  • 클래스이기에 new생성자 사용해서 생성할 수 있지만 권장하지 않음
  • String은 상수풀에 생성되고 중복된 문자를 다른 변수로 생성할때는 해당 값을 참조해서 사용
        String s1 = "문자열 생성 방법"; // 보통의 생성 방법, String 변수명 = "값";
        String s2 = new String("문자열 생성 방법2"); // 클래스 생성자. 권장하지 않음

        String s3 = "abcde"; // String 생성하면 상수풀에 생성됨
        String s4 = "abcde"; // 상수풀에 동일한 문자열이 있으면 그것을 참조하고 없으면 생성함
        String s5 = new String("abcde"); // 흙빛이 되어버림.. 구지 생성한다고?// 힙메모리에 생성하는건가?

        System.out.println(s3 == s4); //true // 문자열을 곧바로 생성할 경우 상수 풀에서 찾아 사용
                                            // String은 immuntable하기에 같은값을 참조해도 문제가 발생하지 않음
        System.out.println(s3 == s5); //false // 문자열을 클래스로 생성할 경우 새로운 값을 생성

        System.out.println(s3.equals(s4));//true // equals는 무슨 메서드였지? -> String 값비교 메서드.
        System.out.println(s3.equals(s5));//true 

String 메서드

  • length() 스트링의 길이 출력
  • charAt(index) index에 위치한 char 출력
  • indexOf('char') char이 몇번 index에 위치하는가 출력
  • equalsIgnoreCase("string") string과의 값비교 같으면 true(대소문자구분 x)
  • replace('i','t') char 'i'를 't'로 바꾸어서 출력(기존 값에는 영향x)
  • substring(a, b) index a~(b-1)번째까지 출력해줌 (b는 포함안됨)
  • trinm() 양옆의 공백 제거해주는 메소드
  • repeat(i) string을 i만큼 반복시켜주는 메서드
  • toCharArray() String을 char단위로 새로운 배열에 넣어줌. String배열을 불러오는것이 아닌 새로운 배열을 만드는 것.
  • equals(anObject) anObject와 비교한 결과 출력(boolean)
        String s = "This is a string.";
        System.out.println(s.length()); //16 //length 같이 이름만들어도 기능이 예상되는게 잘지은 이름이다.
                                        //이름을 짓기 어려운 기능은 메서드로 만들지 않는 것이 좋다.
        System.out.println(s.charAt(2));//i
        System.out.println(s.indexOf('a'));//8 // a가 몇번 인덱스에 위치하는가?
        System.out.println(s.equalsIgnoreCase("this Is A STRiNg."));//true//문자열비교해서 같은면true
                                                                                // 대소문자 구분x
        System.out.println(s.replace('i','t'));//Thts ts a strtng.//기존의 String을 바꾸는것은 아님
                                                            //변경된 String을 생성해서 출력하는 것
        System.out.println(s);//This is a string.// 기존 내용 유지
        System.out.println(s.substring(3, 9));//s is a // index 3~8번까지 출력해줌(마지막 인덱스 제외)
        System.out.println(" wwefw ".trim());//wwefw// 양옆의 공백 제거해주는 메소드
        System.out.println("*".repeat(10));//********** //문자열을 반복해줌
        // 추가적인것은 더 찾아서 사용하면 된다.

        char[] characters = s.toCharArray();
        for(char value : characters){
            System.out.println(value);
        } // String의 배열을 불러온것이 아닌 새로운 배열을 만든것임// so 여기 배열 내용 변경시켜도 원문에 변화없음

예제

/**
 * 도메인 뒤집기
 *
 * 주어진 홈페이지 주소를 .을 기준으로 각각 뒤집어 출력하시오.
 *
 * ex) www.google.com -> www.elgoog.moc
 *
 * 인자
 * string: 홈페이지 주소
 */

public class DomainReverse {

        public static void main(String[] args) {
//
//            // #1 replace()
//            String string = "www.google.com";
//
//            System.out.println(string.replace("google.com","elgoog.moc"));
//
//            // #2 split()
//
//            String[] strA = string.split("\\.",0);
//
//            for (int i = 0; i <strA.length;i++){
//
//                for(int j = strA[i].length()-1 ; j>=0 ; j-- ) {
//                    System.out.print(strA[i].charAt(j));
//                }
//                if(i != strA.length-1){
//                    System.out.print('.');
//                }
//            }
//            System.out.println("");
//
//            // #3 String Buffer
//
//            for(int i = 0 ; i < strA.length;i++  ){
//                StringBuffer sBuffer = new StringBuffer(strA[i]);
//                System.out.print(sBuffer.reverse());
//                if(i != strA.length-1){
//                    System.out.print('.');
//                }
//            }
//
            //풀이 예시

            String string = "www.google.com";
            int i = string.indexOf('.'); // 처음 점 찾기
            StringBuilder s = new StringBuilder(string.length());// ()안에 길이를 설정.

            while (i > 0) {
                StringBuilder s_ = new StringBuilder(string.substring(0, i));//0 ~  i-1까지 짜름// www
                string = string.substring(i + 1);// gooogle.com
                s.append(s_.reverse());//www을 뒤짚음
                s.append('.');
                i = string.indexOf('.');
            }
            s.append(new StringBuilder(string).reverse());// 마지막꺼 뒤짚기기
            string = s.toString();// string빌더를 string으로 바꿔주기

            System.out.println(string);



        }
}

+ Recent posts