-
[Java] 자바 기본 API - StringTokenizer, StringBuffer, StringBuilder ClassCSE/Java 2016. 3. 29. 14:28
자바 기본 API는 여러 절로 구성되어 있습니다.
StringTokenizer, StringBuffer, StringBuilder Class
Regular Expression & Pattern Class
StringTokenizer Class
문자열이 특정 구분자(delimiter)로 연결되어 있을 때, 구분자를 기준으로 하여 문자열을 분리하기 위해서 split() 메소드 또는 StringTokenizer 클래스를 이용할 수 있습니다.
split()은 정규 표현식(Regular Expression)으로 구분하고, StringTokenizer는 문자로 구분한다는 차이점이 있습니다.
split() 메소드
String 클래스의 split() 메소드는 다음과 같이 호출되는데, 정규 표현식을 구분자로 해서 문자열을 분리한 후, 배열에 저장하고 리턴합니다.
1String[] result = "문자열".split("정규표현식");cs 다음은 기호로 구분된 이름을 분리하여 출력하는 예제입니다.
* StringSplitExam.java
12345678910111213141516171819package api;public class StringSplitExam {public static void main(String[] args) {String text = "Jack&Nick,Ciel-Tom,Jolie";String[] names = text.split("&|,|-");for (String name : names) {System.out.println(name);}}}cs StringTokenizer 클래스
문자열이 한 종류의 구분자로 연결되어 있을 경우, StringTokenizer 클래스를 사용하면 손 쉽게 문자열(토큰: token)을 분리해 낼 수 있습니다. StringTokenizer 객체를 생성할 때 첫 번째 파라미터로 전체 문자열을 주고, 두 번째 파라미터로 구분자를 주면 됩니다. 만약 구분자가 생략되면 구분자는 기본적으로 공백(space)가 됩니다.
12StringTokenizer st = new StringTokenizer("문자열", "구분자");cs StringTokenizer 객체가 생성되면 부분 문자열을 분리해 낼 수 있는데, 다음 메소드들을 이용해서 전체 토큰 수, 남아 있는 토큰 여부를 확인한 다음, 토큰을 읽으면 됩니다.
다음은 두 가지 방법으로 토큰을 추출하는 방법을 보여줍니다.
* StringTokenizerExam.java
12345678910111213141516171819202122232425262728293031323334package api;import java.util.StringTokenizer;public class StringTokenizerExam {public static void main(String[] args) {String text = "Jack/Jolie/Chan";// Way 1StringTokenizer st = new StringTokenizer(text, "/");int countTokens = st.countTokens();for (int i = 0; i < countTokens; i++) {String token = st.nextToken();System.out.println(token);}System.out.println();// Way 2st = new StringTokenizer(text, "/");while (st.hasMoreTokens()) {String token = st.nextToken();System.out.println(token);}}}cs StringBuffer, StringBuilder Class
문자열을 저장하는 String은 내부의 문자열을 수정할 수 없습니다. 예를 들어 String의 replace() 메소드는 내부의 문자를 대치하는 것이 아니라, 대치된 새로운 문자열을 리턴합니다.
문자열을 변경하는 작업이 많을 경우에는 String 클래스를 사용하는 것보다 java.lang 패키지의 StringBuffer 또는 StringBuilder 클래스를 사용하는 것이 좋습니다. 이 두 클래스는 내부 버퍼에 문자열을 저장해 두고, 그 안에서 추가, 수정, 삭제를 할 수 있도록 설계되어 있습니다.
StringBuffer와 StringBuilder 의 사용법은 동일한데 차이점은 StringBuffer는 멀티 스레드 환경에서 사용할 수 있도록 동기화가 적용되어 있어 스레드에 안정하지만, Builder는 단일 스레드 환경에서만 사용하도록 설계되어 있습니다.
StringBuilder 클래스는 몇 가지 생성자를 제공하고 있는데, 기본 생성자인 StringBuilder() 는 16개의 문자들을 저장할 수 있는 초기 버퍼를 만들고, StringBuilder(int capacity) 생성자는 capacity로 주어진 개수만큼 문자들을 저장할 수 있는 초기 버퍼를 만듭니다. StringBuilder는 버퍼가 부족할 경우 자동으로 버퍼 크기를 늘리기 때문에 초기 버퍼의 크기는 그다지 중요하지 않습니다.
StringBuilder 객체가 생성되었다면 버퍼 내에서 문자 추가, 삽입, 삭제 등의 작업을 할 수 있는데 다음 메소드를 이용하면 됩니다.
append()와 insert() 메소드는 매개 변수가 다양한 타입으로 오버로딩되어 있기 때문에 대부분의 값을 문자로 추가 또는 삽입 할 수 있습니다.
* StringBuilderExam.java
1234567891011121314151617181920212223242526272829303132package api;public class StringBuilderExam {public static void main(String[] args) {StringBuilder sb = new StringBuilder();sb.append("Java ");sb.append("Project Meeting");System.out.println(sb.toString());sb.insert(4, "8");System.out.println(sb.toString());sb.setCharAt(4, '9');System.out.println(sb.toString());sb.replace(14, 21, "Design");System.out.println(sb.toString());sb.delete(4, 5);System.out.println(sb.toString());int length = sb.length();System.out.println("총 문자수 : " + length);}}cs
end* 이 포스트은 서적 '이것이 자바다' 를 참고하여 작성한 포스트입니다.'CSE > Java' 카테고리의 다른 글
[Java] 자바 기본 API - Wrapper Class (0) 2016.04.16 [Java] 자바 기본 API - Arrays Class (1) 2016.04.16 [Java] 자바 기본 API - 정규 표현식과 Pattern Class (0) 2016.04.16 [Java] 자바 기본 API - String Class (0) 2016.03.29 [Java] 자바 기본 API - Class Class (0) 2016.03.28 [Java] 자바 기본 API - System Class (0) 2016.03.28