String / StringBuilder

Summary

String은 불변이라 반복 연결하면 느리다.
반복 생성/수정은 StringBuilder를 쓴다.


검증 코드

import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        String str = "abc";
        int n = 5;
        String paddedNumber = String.format("%0" + n + "d", 23);
        String paddedString = String.format("%" + n + "s", str);
        char[] arr = str.toCharArray();
 
        System.out.println(paddedNumber);
        System.out.println(paddedString);
        System.out.println(Arrays.toString(arr));
        System.out.println(String.join("", new String[]{"a", "b"}));
    }
}

String 자주 쓰는 메서드

String s = "abcde";
 
s.startsWith("ab");
s.endsWith("de");
s.trim();
s.length();
s.isEmpty();
s.charAt(0);
s.compareTo("abd");
s.indexOf('c');
s.lastIndexOf('e');
s.contains("bc");
s.equals("abcde");
s.substring(1, 3); // index 1~2
s.substring(2);    // index 2~끝
s.toUpperCase();
s.toLowerCase();
s.matches("[a-z]+");
s.repeat(3);

배열 / join / split

char[] chars = s.toCharArray();
System.out.println(Arrays.toString(chars));
 
String joined = String.join("", new String[]{"a", "b", "c"});
 
String[] words = "try hello world".split(" ", -1);
String[] dot = "a.b.c".split("\\.");
String[] spaces = "a   b".split("\\s+");

String.format

Warning

String.format("%0" + n + "d", 5)는 가능하다.
n = 4이면 포맷 문자열이 "%04d"가 된다.

int n = 4;
String num = String.format("%0" + n + "d", 5); // "0005"
String str = String.format("%" + n + "s", "ab"); // "  ab"

빠른 참조 (정렬 / 자리수 / 정밀도):

%d_     "%5d_"  ->  "   23_"   (오른쪽 정렬, 폭 5)
        "%-5d_" ->  "23   _"   (왼쪽 정렬)
        "%05d_" ->  "00023_"   (0 채움)
%,d     "%,d"   ->  "123,456,789"  (천 단위 콤마)
%s      "%12s"  ->  "        tete" (오른쪽 정렬)
        "%-12s" ->  "tete        " (왼쪽 정렬)
        "%.2s"  ->  "te"          (앞 2글자만)

%d는 폭에 변수 사용이 안 되지만("%" + n + "d"는 가능),
%s"%" + n + "s"처럼 폭에 변수를 직접 넣을 수 있다.


StringBuilder

StringBuilder sb = new StringBuilder();
 
sb.append("abc");
sb.charAt(0);
sb.insert(1, "X");
sb.delete(1, 3);
sb.deleteCharAt(0);
sb.indexOf("c");
sb.setCharAt(0, 'A');
sb.replace(0, 1, "Z");
sb.reverse();
sb.setLength(0); // 비우기
 
String result = sb.toString();

주의점

실수주의
반복문에서 str += xO(N^2) 가능. StringBuilder 사용
split(".").은 정규식 전체 문자. split("\\.") 사용
contains()정규식 불가. 정규식은 matches()
스마트 따옴표코드에는 "만 사용