자바 개발을 하다가 잠시 삽질을 한 부분이 있어 포스팅으로 정리를 해봅니다.
LEE|20000|ABCDEFG|1234567|2022/06/25
위와 같이 여러 자료들이 들어가 있고 그 사이는 특정한 특수 문자로 구분 짓는 문자열이 있습니다. 각 자료를 추출하기 위해 String 클래스의 split 메소드를 호출하면 되는데, 주의할 점이 있습니다. 먼저 코드를 보시죠.
String data = "LEE|20000|ABCDEFG|1234567|2022/06/25";
String [] fields = data.split("|");
System.out.println(data[0]);
위 코드는 틀렸습니다. fields[0]의 값이 "LEE"이기를 기대하지만, 결과는 "L"입니다. 무엇이 잘못되었을까요?
...
String 클래스의 split 메소드의 파라메터를 보겠습니다.
public String split(String regex)
regex가 문자열을 자르기 위해 사용하는 구분자(delimiter)인데요. 이게 정규식(regular expression)입니다. '|' 문자는 정규식에서 특별한 용도로 사용하는 특수 문자입니다. 이 때문에 regex가 "|"이면, split 메소드는 '|' 문자로 문자열을 자르는 작업을 하지 않고 한 글자씩 자릅니다.
regex 파라메터에 "|" 대신 "\|"를 대입하면 됩니다. 위 코드를 다음과 같이 수정하면 됩니다.
String data = "LEE|20000|ABCDEFG|1234567|2022/06/25";
String [] fields = data.split("\\|");
System.out.println(data[0]);
그러면 fields[0]의 값은 의도한대로 "LEE"입니다.
https://bytes.com/topic/java/answers/772186-cant-do-str-split