간단한 문자열을 파싱할때 사용한던 함수인데 생각지도 못한 결론이 나와서 찾아본것을 정리해본 내용입니다.
1. 구분자를 이용한 parsing
String str1 = "dst|t1|1|||||";
String[] str1Array = str1.split("\\|");
System.out.println(str1Array.length);
위의 경우를 실행해보면 우리가 생각하는 것과 다른 결과가 나오더라구요
// 기본 split - 끝의 빈 문자열 무시
String[] str1Array = str1.split("\\|");
System.out.println("기본 split 결과 길이: " + str1Array.length); // 3 출력
끝의 빈 문자열을 무시해서 생각하는것처럼 안되는 case가 발생이 됩니다.
2. 해결방법
// limit를 음수로 지정 - 모든 빈 문자열 포함
String[] str1ArrayWithEmpty = str1.split("\\|", -1);
System.out.println("limit -1 split 결과 길이: " + str1ArrayWithEmpty.length); // 8 출력
// 결과 내용 확인
System.out.println("\n=== 배열 내용 출력 ===");
for (int i = 0; i < str1ArrayWithEmpty.length; i++) {
System.out.println("인덱스 " + i + ": [" + str1ArrayWithEmpty[i] + "]");
}
split() 메소드의 limit 파라미터:
따라서 모든 구분자를 포함하여 정확한 개수를 얻으려면 split("\\|", -1)을 사용하시면 됩니다.
역시 개발은 실행해봐야 아는듯 합니다.
기억보다는 기록을 하기위해 포스팅을 합니다.
[Logback] springboot logback 설정에 간단 정리 (0) | 2024.12.23 |
---|---|
Java에서 equals와 equalsIgnoreCase의 차이 (0) | 2024.09.24 |
Lucy XSS Servlet: Java 웹 애플리케이션의 XSS 공격 방어책 (0) | 2024.07.17 |
Base64 인코딩된 이미지의 크기 구하기 (0) | 2024.06.27 |
Jasypt 를 이용한 암호화 하기 (1) | 2024.06.10 |