ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • String관련 API
    개발/자바JAVA 2024. 2. 11. 15:37

    ▶String 관련 클래스

      : String은 문자열을 다루기 위해 고안된 클래스 타입(참조 자료형)

        >  불변 클래스임!!

        --> 값을 수정할 때마다 메모리 공간 내부에서 값 변경이 일어나는게 아니라

             메모리 공간의 할당이 새롭게 일어나기 때문

     

    ▶StringBuilder 와 StringBuffer

      >값의 수정이 일어날 때 마다 메모리 공간의 할당이 계속 일어남. 

       이를 해결하기 위해 나온개념들임!!

     

       > StringBuilder 가 속도가 조금 더 빠름, 동시에 여러일 처리 못함.

       > StringBuffer 가 속도는 조금 느리나, 동시에 여러일 처리 가능!!( ==thread safe 하다)

     

    ◆StringBuilder는 이런식으로 사용가능하다!!

    public void method4() {
    		
    		// StringBuilder 객체 사용법
    		StringBuilder sb = new StringBuilder();
    		System.out.println("sb : " + sb); // ""
    		System.out.println(sb.hashCode()); // 474675244
    		
    		// 문자열을 연이어주는 메소드
    		// [ 표현법 ]
    		// sb.append(연이을문자열);
    		sb.append("Hello"); // "" + "Hello"
    		System.out.println("sb : " + sb); // "Hello"
    		System.out.println(sb.hashCode()); // 474675244
    	}

     

     

     

    ◆ StringBuffer사용법

    public void method5() {
    		
    		// StringBuffer 객체 사용법
    		StringBuffer sb = new StringBuffer();
    		System.out.println("sb : " + sb); // ""
    		System.out.println(sb.hashCode()); // 932583850
    		
    		// 문자열을 연이어주는 메소드
    		// [ 표현법 ]
    		// sb.append(연이을문자열);
    		sb.append("Goodbye"); // "" + "Goodbye"
    		System.out.println("sb : " + sb);
    		System.out.println(sb.hashCode()); // 932583850
    		
    	}

     

     

    ▶문자열과 관련된 유용한 메소드들

     

    ◆문자열.CharAt(int index) : char

      > 문자열로부터 전달받은 index 위치의 문자 하나만 뽑아서 리턴!!

     

    String str1 = "Hell World"
    
    char ch = str1.charAt(3);
    
    System.out.println("ch : " + ch); // 'l'

     

    *0부터 카운트 해야함.

     

    문자열.concat(String str) : String

      > 문자열과 전달된 또 다른 문자열을 하나로 합쳐서 리턴

    String str2 = str1.concat("!!!"); // str2 = str1 + "!!!"
    System.out.println("str2 : " + str2); // "Hell World!!!"

     

     

    ◆ 문자열.length() : int

      > 문자열의 길이를 반환

    System.out.println("str1 의 길이 : " + str1.length()); // 10

     

     

      문자열.substring(int beginIndex) : String

      > 문자열의 beginIndex 위치에서부터 끝까지의 부분 문자열을 추출해서 리턴

     

        문자열.substring(int beginIndex, int endIndex) : String

      >문자열의 beginIndex 위치에서부터 endIndex - 1 까지의 부분 문자열을 추출해서 리턴

     

    System.out.println(str1.substring(6)); // "orld"
    System.out.println(str1.substring(0, 6)); // "Hell W"
    // > 오버로딩된 형태임!!

     

     

    문자열.replace(char old, char new) : String

      > 문자열로부터 old 문자를 new 문자로 변환한 문자열 결과를 리턴

     

    String str3 = str1.replace('l', 'c');
    System.out.println("str3 : " + str3); // "Hecc Worcd"

     

     

    ◆ 문자열.trim() : String

      > 문자열로부터 앞, 뒤의 공백을 제거한 문자열 리턴

     

    String str4 = "     JA     VA     ";
    System.out.println("trim() : " + str4.trim());

     

     

    * 중간의 공백도 제거하고 싶다면??

       > replace 메소드 활용.

    System.out.println("중간 공백도 제거 : " + str4.replace(" ", ""));

     

     

     

    ◆ 문자열.toUpperCase() : String  / 문자열.toLowerCase() : String

      > 문자열을 모두 다 대/소 문자로 변경 후 결과 문자열 리턴

     

    System.out.println("upper : " + str1.toUpperCase());
    System.out.println("lower : " + str1.toLowerCase());

     

    활용 -->

    Scanner sc = new Scanner(System.in);
    		System.out.print("종료하시겠습니까? (y/n) : ");
    		// char answer = sc.nextLine().charAt(0); // 'Y' 'y' 'N' 'n'
    		char answer = sc.nextLine().toUpperCase().charAt(0); // 'Y' 'N'
    		// > 메소드체이닝 : 메소드를 연이어 호출한다.
    		
    		if(answer == 'Y') {
    			System.out.println("종료합니다.");
    		} else {
    			System.out.println("종료하지 않습니다.");
    		}
    		*/
    		
    		// 문자열 --> char[]
    		/*
    		char[] arr = new char[str1.length()];
    		for(int i = 0; i < arr.length; i++) {
    			arr[i] = str1.charAt(i);
    		}

     

     

     

     문자열.toCharArray() : char[]

      > 문자열의 각 문자들을 char[] 배열에 옮겨 담은 후 해당 배열을 리턴

     

    char[] arr = str1.toCharArray();
    		System.out.println(Arrays.toString(arr));
    
    		// char[] --> 문자열
    		char[] arr2 = {'a', 'p', 'p', 'l', 'e'};
    		/*
    		String result = "";
    		for(int i = 0; i < arr2.length; i++) {
    			result += arr2[i];
    		}

     

      >static valueOf(char[] data) : String

        > 전달된 char[] 에 담긴 문자들을 하나의 문자열로 연이어서 리턴

    System.out.println(String.valueOf(arr2));

     

     

    ▶ 사용자에게 채팅을 입력받아 불필요한 단어를 제거한 뒤 출력하는 프로그램

    // 불필요한 단어 (욕설) : ~~~
    		
    		// 이런 개나리같은 신발끈 호루라기야
    		// 이런 ***같은 *** ****야
    		
    		// 필터링할 단어들을 배열로 셋팅
    		String[] filter = {"신발끈", "개나리", "수박씨", "호루라기"
    						 , "시베리아", "십장생", "조카", "주옥", "쌍쌍바", "십자수"};
    		
    		// 사용자로부터 채팅 내용 입력받기
    		Scanner sc = new Scanner(System.in);
    		System.out.print("메세지를 입력하세요 : ");
    		String str = sc.nextLine();
    		
    		// 입력받은 문자열에 filter 배열에 포함된 단어가 하나라도 있는지 검사
    		for(int i = 0; i < filter.length; i++) {
    			
    			int size = filter[i].length();
    			
    			/*
    			String chat = "";
    			for(int j = 0; j < size; j++) {
    				chat += "*";
    			}
    			*/
    			
    			String chat = "" + filter[i].charAt(0);
    			for(int j = 0; j < size - 1; j++) {
    				chat += "*";
    			}
    			
    			str = str.replace(filter[i], chat);
    		}
    		
    		System.out.println(str);
    		
    	}

     

     

      문자열을 "단어" 단위로 분리하는 방법

     

      ◆ 방법1) 분리된 문자열들을 String[] 배열에 차곡차곡 담아서 관리하는 방법

     

           > 문자열.split(String 구분자) : String[]

    String str = "Java,Oracle,JDBC,HTML,Server,Spring";
    
    		String[] arr = str.split(",");
    		
    		for(int i = 0; i < arr.length; i++) {
    			System.out.println(arr[i]);
    		}

     

     

     *배열의 경우 for문을 다음과 같이 쓸 수도 있다. (향상된 for문, foreach문)

    // for(값을받아줄변수선언문 : 순차적으로접근할배열명) { }
    		for(String s : arr) {
    			
    			System.out.println(s);
    		}

     

     

      ◆방법2 ) StringTokenizer 클래스를 이용해서 분리된 단어들을 토큰 단위로 취급하는 방법

         

         >* java.util.StringTokenizer 클래스,   객체 생성 시 매개변수로 문자열과 구분자를 제시하면 됨

     

    StringTokenizer stn = new StringTokenizer(str, ",");
    		
    		System.out.println("분리된 문자열의 갯수 : " + stn.countTokens());
    		
    		// 분리된 토큰들을 하나씩 뽑아서 출력
    		// > stn.nextToken(); 메소드 활용
    		
    		System.out.println(stn.nextToken()); // Java
    		System.out.println(stn.nextToken()); // Oracle
    		System.out.println(stn.nextToken()); // JDBC
    		System.out.println(stn.nextToken()); // HTML
    		System.out.println(stn.nextToken()); // Server
    		System.out.println(stn.nextToken()); // Spring
    		
    		System.out.println("현재 담겨있는 문자열의 갯수 : " + stn.countTokens());

     

    만약 더이상 없는데 뽑으려 한다면 

    NoSuchElementException 오류 발생 = 현재 남아있는 stn 토큰의 갯수의 범위를 벗어나면 더이상 뽑을 요소가 없어서 오류 발생

     

    while 문으로 뽑아도 됨!!

    while(stn.hasMoreTokens()) {
    			
    			System.out.println(stn.nextToken());
    		}

     

    '개발 > 자바JAVA' 카테고리의 다른 글

    java.util.Date 클래스  (1) 2024.02.11
    예외 처리(Exception)  (0) 2024.02.05
    기본API(Application Programming Interface)  (0) 2024.02.02
    추상클래스(Abstract Class)  (0) 2024.02.02
    다형성(Polymorphism)  (1) 2024.01.31
Designed by Tistory.