/ ALGORITHM

String

Algorithm 관련 포스팅

이 글은 알고리즘 문제를 풀면서 String과 관련한 메서드를 정리한 것입니다.

역순 출력

  • for 문 구조 for (변수 초기값; 변수 조건문; 변수의 증감식)
  • 기존에 익숙했던 패턴인 for (int i = 0; i < 배열.length; i++)을 수정
  • for (int i = my_string.length() - 1; i >= 0; i--)

    i 초기 값은 my_string.length() - 1로 시작하며, i가 0 보다 클 때, i 값은 1씩 감소함

  • charAt(index)으로 문자열의 index에 해당하는 문자 반환
  • 예시

      String my_string = "bread";
      String result = "";
        
      // for문 구조 수정
      for (int i = my_string.length() - 1; i >= 0; i--) { 
      		result += my_string.charAt(i);
      }
        
      System.out.println(result);
    
    • result
      daerb
    

배수 번째의 문자 출력

  • for문 구조를 이용해 if문의 조건을 대신함
  • code 번째를 나타내는 조건문 if (i % code == 0)

    for문으로 for (int i = code; i <= cipher.length(); i += code) 바꾸어 나타내면 간략해짐

    i 초기 값은 code로 시작하며, 문자열의 길이만큼 반복문을 돌며, i 값은 code만큼 더해짐

  • 예시: 문자열(cipher)의 배수(code) 번째 문자만 골라서 출력하는 코드
    • for문 구조 변경 전 코드
      String cipher = "dfjardstddetckdaccccdegk";
      int code = 4;
      String result = "";
        
      for (int i = 1; i < cipher.length() + 1; i++) { // for문 구조 변경 전
          if (i % code == 0) {                        // if문 필요
              result += cipher.charAt(i - 1);
          }
      }
      System.out.println("result = " + result);
        
    
    • result
      result = attack
    

    • for문 구조 변경 후 코드
      String cipher = "dfjardstddetckdaccccdegk";
      int code = 4;
      String result = "";
        
      for (int i = code; i <= cipher.length(); i += code) { // for문 구조 변경 후
          result += cipher.charAt(i - 1);                   // if문 불필요 
      }
      System.out.println("result = " + result);
    
    • result
      result = attack
    

변수 타입 확인

  • 객체의 경우, getClass().getSimpleName()으로 타입을 확인
  • primitive type의 경우, Object로 형변환을 한 뒤 getClass().getSimpleName()으로 타입을 확인
  • 예시

      int num = 29183;
      String str = "cake";
      int[] numArr = {8, 7, 6, 5};
      String[] numStrArr = {"Apple", "Banana", "Car"};
        
      System.out.println(((Object)num).getClass().getSimpleName()); // Integer
      System.out.println(str.getClass().getSimpleName());           // String
      System.out.println(numArr.getClass().getSimpleName());        // int[]
      System.out.println(numStrArr.getClass().getSimpleName());     // String[]
        
    
    • result
      Integer
      String
      int[]
      String[]
    

char[]을 String으로 변환

  1. String 생성자 이용

    : char[]를 인자로 받아 내부적으로 String.valueOf()를 호출함

    • 예시

        char[] ch = {'m', 'i', 'n', 'g'};
        String str = new String(ch);
              
        System.out.println(str);
      
      • result
        ming
      
  2. String.valueOf()
    • 예시
     char[] ch = {'c', 'h', 'e', 'r', 'r', 'y'};
     String str = String.valueOf(ch);
        
     System.out.println(str);
    
    • result
     cherry
    
  3. StringBuilder 인스턴스 생성 후 append() 메서드 사용
    • 예시
     char[] ch = {'b', 'l', 'o', 's', 's', 'o', 'm'};
     StringBuilder sb = new StringBuilder();
     for (int i = 0; i < ch.length; i++) {
         sb.append(ch[i]);
     }
        
     System.out.println(sb);
    
    • result
     blossom
    

String[]을 String으로 변환

  • String.join(구분자, 배열)
  • 예시

      String[] str_arr = {"apple", "banana", "cherry"};
        
      String str_result = String.join("-", str_arr);
        
      System.out.println(str_result); // apple-banana-cherry
    
    • result
      apple-banana-cherry
    

기본형을 String으로 변환

  • String.valueOf()을 이용해 boolean, char, int, long, float, doubleString으로 변환
  • getClass().getSimpleName() 으로 타입 확인
  • 예시

      boolean bool = true;
      char ch = 'c';
      int in = 101;
      long l = 100L;
      float f = 3.14f;
      double d = 1.23;
        
      String bool_str = String.valueOf(bool); // String
      String ch_str = String.valueOf(ch); // String
      String in_str = String.valueOf(in); // String
      String l_str = String.valueOf(l); // String
      String f_str = String.valueOf(f); // String
      String d_str = String.valueOf(d); // String
        
      System.out.println(bool_str.getClass().getSimpleName()); // String
    
    • result
      String
    

String을 char[]로 변환

  • 문자열.toCharArray()
  • 예시

      String str = "Spring";
        
      char[] chArr = str.toCharArray(); // String -> char[]
        
      System.out.println(Arrays.toString(chArr));
    
    • result
      [S, p, r, i, n, g]
    

대/소문자 변환

  • toUpperCase(), toLowerCase()
  • 예시

      String my_string = "abCdEfghIJ";
        
      System.out.println(my_string.toUpperCase()); // ABCDEFGHIJ
      System.out.println(my_string.toLowerCase()); // abcdefghij
    
    • result
      ABCDEFGHIJ
      abcdefghij
    

문자 위치 찾기

  • 문자열.indexOf(): 문자열에서 해당 문자의 첫 등장 위치 반환

      int indexOf(String str) // str: 찾을 문자열
      int indexOf(String str, int fromIndex) // str: 찾을 문자열, fromIndex: 시작 인덱스 
    
  • 예시: 처음 등장하는 문자만 반환하기

      String my_string = "We are the world";
      String answer = "";
        
      for (int i = 0; i < my_string.length(); i++) {
          if (my_string.indexOf(my_string.charAt(i)) == i) answer += my_string.charAt(i);
      }
      System.out.println(answer);
    
    • result
      We arthwold
    

문자 포함 여부

  • 주어진 문자열.contains(찾는 문자열): 주어진 문자열에서 특정 문자열의 포함 여부(true/false)를 반환

      boolean contains(CharSequence s) // s: 찾을 문자열
    
  • 예시

      String str1 = "ab6CDE443fgh22iJKlmn1o";
      String str2 = "6CD";
        
      System.out.println(str1.contains(str2)); // true
        
      String str3 = "ppprrrogrammers";
      String str2 = "pppp";
        
      System.out.println(str3.contains(str4)); // false
    
    • result
      true
      false
    

문자 치환

  • 문자열.replaceAll(타겟의 정규식, 교체될 문자열): 반환

      String replaceAll(String regex, String replacement)
    
  • 예시-1) 문자열 "one", "six", "seven""1", "6", "7" 로 교체하기

      String numbers = "onefourzerosixseven";
      answer = numbers.replaceAll("one", "1")
                      .replaceAll("six", "6")
                      .replace("seven", "7");
        
      System.out.println(answer);
    
    • result
      1fourzero67
    
  • 예시-2) 주어진 문자열에서 모음 'a', 'i', 'u', 'e', 'o' 제거하기

      String my_string = "nice to meet you";
      String answer = "";
        
      answer = my_string.replaceAll("[aiueo]", "");
      System.out.println(answer);
    
    • result
      nc t mt y