본문 바로가기

Foundation/- Java

유용한 클래스(StringBuffer, Random)(2)

1.5 join()과 StringJoiner

join()은 여러 문자열 사이에 구분자를 넣어서 결합한다. 구분자로 문자열을 자르는 split()과 반대의 작업을 한다고 생각하면 이해하기 쉽다.

java.util.StringJoiner클래스를 사용해서 문자열을 결합할 수도 있다. 예시를 보면 쉽게 이해가 갈 것이다.

 

2.1 StringBuffer클래스의 특징

- String처럼 문자열 배열(char[])을 내부적으로 가지고 있다.

- String클래스와 달리 내용을 변경할 수 있다.

- 인스턴스를 생성할 때 버퍼(배열)의 크기를 충분히 저정해주는 것이 좋다.

(버퍼가 작으면 성능을 저하시킨다. )

- String클래스와 달리 equals()를 오버라이딩하지 않았다.

 

2.2 StringBuffer클래스의 생성자와 메서드

- StringBuffer클래스 역시 문자열을 다루기 위한 것이기 때문에 String클래스와 유사한 메서드가 많다. StringBuffer는 저장된 내용을 변경할 수 있기 때문에 추가,변경, 삭제와 같은 메서드가 추가로 제공된다.

 

(1) StringBuffer()

- 16문자를 담을 수 있는 버퍼를 가진 StringBuffer인스턴스를 생성한다.

(2) StringBuffer(int length)

- 지정된 개수의 문자를 담을 수 있는 버퍼를 가진 StringBuffer인스턴스를 생성한다.

(3) StringBuffer(String str)

- 지정된 문자열 값(str)을 갖는 StringBuffer 인스턴스를 생성한다.

 

(4) StringBuffer append(some)

- 매개변수(some) 입력된 값을 문자열로 변환하여 StringBuffer인스턴스가 저장하고 있는 문자열의 뒤에 덧붙인다.

위 예제를 보면 append메서드의 반환값은 StringBuffer로 자신읜 주소를 반환한다.

따라서 sb1과 sb2는 같은 주소를 가르키며, 연속적으로 append를 호출하여 사용할 수 있다.

 

(5) int capacity()

- StringBuffer인스턴스의 버퍼크기를 알려준다. length()는 버퍼에 담긴 문자열의 길이를 알려준다.

(6) char charAt(int index)

- 지정된 위치(index)에 있는 문자를 반환한다.

 

(7) StringBuffer delete (int start, int end)

- 시작위치(start)부터 끝 위치(end) 사이에 있는 문자를 제거한다. 단, 끝 위치의 문자는 제외.

(8) StringBuffer deleteCharAt(int index)

- 지정된 위치(index)의 문자를 제거한다.

(9) StringBuffer insert(int pos, some)

- 두 번째 매개변수(some)로 받은 값을 문자열로 변환하여 지정된 위치(pos)에 추가한다. pos는 0부터 시작.

(10) int length()

- StringBuffer인스턴스에 저장되어 있는 문자열의 길이를 반환한다(예제 생략)

 

(11) StringBuffer replace(int start, int end, String str)

- 지정된 범위(start~end)의 문자들을 주어진 문자열로 바꾼다. end위치의 문자는 범위에 포함 되지 않음.(start <= x < end)

(12) StringBuffer reverse()

- StringBuffer인스턴스에 저장되어 잇는 문자열의 순서를 거꾸로 나열한다.

 

(13) void setCharAt(int index, char ch)

-지정된 위치의 문자를 주어진 문자(ch)로 바꾼다.

 

(14) void setLength(int newLength)

- 지정된 길이로 문자열의 길이를 변경한다. 길이를 늘리는 경우에 나머지 빈 공간을 널문자로 채운다.

커서가 있는 곳까지 널로 채워져있는 것을 알 수 있다.

 

(15) String toString()

- StringBuffer인스턴스의 문자열을 String으로 반환

(16) String substring(int start)

      String substring(int start, int end)

-지정된 범위 내의 문자열을 String으로 뽑아서 반환한다. 시작위치(start)만 지정하면 시작위치부터 문자열 끝까지 뽑아서 반환한다.

※StringBuilder

StringBuffer는 멀티쓰레드에 안전하도록 동기화되어 있다. 여기서 동기화는 StringBuffer의 성능을 떨어뜨린다. 따라서 멀티쓰레드로 작성된 프로그램이 아닌 경우, 쓰레드의 동기화만 뺀 StringBuffer가 새로 추가되었다. 완전 똑같은 기능으로 작성되어있어서 StringBuffer 대신에 StringBuilder로 바꾸기만 하면 된다.

 

 

3.1 java.util.Random 클래스

 

 메서드

설명 

Random() 

System.현재시간을 종자값(seed)으로 이용하는 Random인스턴스를 생성한다. 

Random(long seed) 

매개변수 seed를 종자값으로 하는 Random인스턴스를 생성한다. 

boolean nextBoolean() 

boolean타입의 난수를 반환한다. 

void nextBytes(byte[] bytes) 

bytes배열에 byte타입의 난수를 채워서 반환한다. 

double nextDouble() 

double타입의 난수를 반환한다. 

float nextFloat() 

float타입의 난수를 반환한다. 

double nextGaussian() 

평균은 0.0이고 표준편차는 1.0인 가우시안(Gaussian)분포에 따른 double형의 난수를 반환한다. 

int nextInt() 

int타입의 난수를 반환한다(int의 범위) 

int nextInt(int n) 

0~n의 범위에 있는 int값을 반환한다.(n은 범위에 포함되지 않는다.) 

long nextLong() 

long타입의 난수를 반환한다(long의 범위) 

void setSeed(long seed) 

종자값을 주어진 값(seed)으로 변경한다. 

예제를 천천히 분석해보면 쉽게 이해할 수 있다.

 

4.1정규식(Regular Expression)-java.util.regex패키지

-정규식을 이용하면 많은 양의 텍스트 파일 중에서 원하는 데이터를 손쉽게 뽑아낼 수도있고 입력된 데이터가 형식에 맞는지 체크할 수도 있다.

자주 쓰이는 정규식과 그에 맞는 예제를 보고 이해하자.

 정규식 패턴

설명 

c[a-z]* 

c로 시작하는 영단어 

c[a-z] 

c로 시작하는 2자리 영단어 

c[a-zA-Z] 

c로 시작하는 두 자리 영단어(a~z 또는 A~Z, 즉 대문자 포함) 

c[a-zA-Z0-9] 

c\w

c로 시작하고 숫자와 영어로 조합된 두 글자 

.* 

모든 문자열 

c. 

c로 시작하는 두 자리 문자열 

c\. 

c.와 일치하는 문자열'.'은 패턴작성에 사용되는 문자이므로 escape문자인 '\'를 사용해야한다. 

c\d

c[0-9] 

c와 숫자로 구성된 두 자리 문자열 

c.*t 

c로 시작하고 t로 끝나는 모든 문자열 

[b|c].*

[bc].*

[b-c].* 

b 또는 c로 시작하는 문자열 

[^b|c].*

[^bc].*

[^b-c].* 

b 또는 c로 시작하지 않는 문자열 

.*a.* 

a를 포함하는 모든 문자열  

*:0 또는 그 이상의 문자

.*a.+ 

a를 포함하는 모든 문자열

+: 1 또는 그 이상의 문자. '+'는 '*'과는 달리 반드시 하나 이상의 문자가 있어야 하므로 a로 끝나는 단어는 포함되지 않았다. 

 [b|c].{2}

b 또는 c로 시작하는 세 자리 문자열 (b 또는 c 다음에 두 자리이므로 모두 세 자리