자바 기본 API 3편<마지막> (StringTokenizer~Date 클래스)

2022. 10. 12. 13:21Java 프로그램

728x90

5. StringTokenizer

문자열을 분리하는 방법에는 두 가지가 있습니다.

- String의 split() 메소드 사용

- java.util.StringTokenizer 클래스 사용

 

1) String의 split() 메소드

- 정규식 표현을 구분자로 해서 부분 문자열 처리

- 배열에 저장하고 리턴합니다.

		String text = "맹구&짱구,철수,유리-훈이";
		String[] names = text.split("&|,|-");
		
		System.out.println(text);
		for(String call : names) {
			System.out.println(call);
		}

split() 메소드는 지정한 문자를 기준으로 특정 문자열을 나누어주는 역할을 합니다.

위 코드에서는 text라는 문자형 변수에 맹구부터 훈이까지 사이사이에 '&'와 ',' 그리고 '-'로 채워져 있습니다.

또한 문자열 배열 names라는 변수에 text 문자열을 split() 메소드에 & , ',' , - 로 설정해주었고 그 후 향상된 for문으로

출력해보았습니다.(split() 에서 | 은 or의 의미가 있습니다.)

Split() 예제 결과

두 개의 출력문에서의 차이가 확연하게 보이는 걸 볼 수 있습니다.

 

2) StringTokenizer 클래스

- 문자열을 지정한 구분할 문자로 분리 시켜주는 클래스 입니다. 그렇게 쪼개진 문자열들을 Token이라고 부릅니다.

=> split이랑 비슷하죠?

import java.util.StringTokenizer;		//클래스라서 import가 필요합니다. 혹시 저랑 같은 코드를 썻는데
					//오류가 뜬다면 import가 되어있는지 확인하세요!
public class Practice {

	public static void main(String[] args) {
		String text = "맹구/짱구/철수";				//....1
		StringTokenizer st = new StringTokenizer(text,"/");	//.....2
		
		while(st.hasMoreTokens()) {		//.....3
			String token = st.nextToken();	//....4
			System.out.println(token);		//....5
		}

		

	}

}

StringTokenizer는 문자열을 지정한 분리문자로 나누고 그 나눈 토큰들을 리턴하는 식으로 실행됩니다.

저는 개인적으로 중간중간 이해안되는 부분이 있으면 전체가 이해하기 찜찜하여 한줄 한줄 번호를 매기며 해보겠습니다.

우선 메소드를 먼저 확인하고 줄마다의 설명을 보겠습니다.

 

StringTokenizer 클래스의 메소드 정리 표

1번줄: 이름 사이사이 '/' 가 들어가있는 문자열을 생성한 것 뿐입니다.

2 번줄: StringTokenizer를 사용하여 객체를 생성한 것이라고 생각하면 되겟습니다.

=> new StringTokenizer(문자열, 분리문자설정); 으로 보면 되겠습니다.

3번줄: st.hasMoreTokens() 으로 남아있는 토큰이 있는지 확인하는 메소드를 사용하여 token이 남아 있다면 실행할 while문을 만들었습니다.

4번줄 : token이라는 변수에 while 반복문이 실행 될때마다 토큰을 하나씩 받는 거라고 생각하면 되겠습니다.

5번줄 : 반복문이 한번씩 실행 될때마다 가져온 token을 출력하는 출력문입니다.

 

6. StringBuffer, StringBuilder 클래스

- Buffer : 데이터를 임시로 저장하는 메모리 입니다. 이곳에 문자열을 저장합니다.

- Buffer 내부에서 추가, 삭제, 수정 작업이 가능합니다.

-멀티 스레드에서는 StringBuffer 를 사용, 단일 스레드에서는 StringBuilder을 사용합니다.

		StringBuilder sb1 = new StringBuilder();
		StringBuilder sb2 = new StringBuilder(16);
		StringBuilder sb3 = new StringBuilder("Java");
        	
		sb1.append("안녕");
		sb1.append(" ");
		sb1.append("나는 맹구야!");
		System.out.println(sb1.toString());

메소드 확인하겠습니다!

Method 설명
append 문자열 끝에 데이터를 추가 합니다.
insert(int offset,...) 지정된 위치에 추가
delete(int start, int end) 인덱스에 해당하는 부분 문자열을 해당 문자열에서 제거
deleteCharAt(int index) i전달된 인덱스에 해당된 문자를 해당 문자열에서 제거
replace(int start, int end, String str) start에서 end의 문자열을 str 문자열로 대체하여 지정
setCharAt(int index, char ch) 지정된 인덱스의 char를 지정한 ch으로 새롭게 셋

문자열 끝에 데이터를 추가하는 메소드인 append를 사용하여 sb1에 "안녕", " "(공백), "나는 맹구야!" 를 추가하여 출력하는 코드입니다.

결과 예시

7.  Arrays 클래스

- 배열 조작 기능을 가지고 있는 클래스입니다.

		char[] arr1 = {'J','A','V','A'};
		char[] arr2 = Arrays.copyOf(arr1, arr1.length);
		
		for(int i=0;i<arr1.length;i++) {
			System.out.print(arr1[i]);
		}
		System.out.println();
		for(int i=0;i<arr2.length;i++) {
			System.out.print(arr2[i]);
		}

먼저 배열을 복사하는 Arrays.copyOf(원본배열, 복사할 길이) 를 해봤습니다.

arr1 : char 타입의 배열로 JAVA의 글자를 한 글자씩 가지고 있습니다.

arr2 : arr1을 Arrays.copyOf로 복사한 배열입니다.

코드의 결과를 한번 보겠습니다.

Arrays.copyOf 결과

첫 줄 JAVA는 arr1의 출력 결과,

두번째 줄 JAVA는 arr2의 출력결과 입니다

 

다음으로 copyOfRange(원본 배열, 시작 인덱스, 끝 인덱스)  해보겠습니다.( 시작인덱스 ~ (끝 인덱스 -1) )를 복사합니다.

		char[] arr1 = {'J','A','V','A'};
		char[] arr2 = Arrays.copyOfRange(arr1, 1,3);
		
		for(int i=0;i<arr1.length;i++) {
			System.out.print(arr1[i]);
		}
		System.out.println();
		for(int i=0;i<arr2.length;i++) {
			System.out.print(arr2[i]);
		}

위 코드의 예제에서 arr2 배열을 Arrays.copyOfRange(복사할 배열, 시작인덱스, 끝 인덱스) 를 사용하여 arr1의 원하는 부분을 복사한 것입니다.

결과를 보겠습니다.

Arrays.copyOfRange 결과

인덱스를 나눠서 보겠습니다.

J A V A
0 1 2 3

이 인덱스에서 시작인덱스는 1 , 끝인덱스는 3 입니다. 복사는 1 부터 시작 되지만 끝인덱스 3에서 -1 을한 2까지 복사가 되므로 AV 만 복사가 됩니다.

 

참고용으로 메소드 표를 첨부하겠습니다!

Arrays 클래스 메소드 항목

8. date 클래스

- 날짜를 표현하는 클래스 입니다.

- 날짜 정보를 객체간에 주고 받을 때 사용한다고 알고 계시면 될 것 같습니다.

		Date nowTime = new Date();
		String strNowTime1 = nowTime.toString();
		System.out.println(strNowTime1);
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초");
		String strNowTime2 = sdf.format(nowTime);
		System.out.println(strNowTime2);

위 코드는 현재 시간을 출력하도록 date 클래스를 사용 한 예시 코드입니다.

SimpleDateFormat으로 출력 형식을 정해주고 다른 형식으로 시간을 출력하도록 두개의 객체를 만들었습니다.

Date 클래스 사용 결과

첫번째 출력은 SimpeDateFormat을 사용하지 않았을 때의 결과이며, 두번째는 형식을 정해 준 다음의 출력입니다.

⁂ KST : Korea Standard Time 입니다..ㅎㅎ

 

자바 API에서 몇개의 주제는 빼서 작성을 했습니다. 나눈 기준은 많이, 자주 필요하지 않을 것 같으며 그나마 중요성과 활용성이 부족할 것 같은 부분은 빼고 복습을 해서 부족한 부분이 있을 수 있습니다.

앞으로 더욱 발전 하겠습니다.

 

이 글로 자바 API 3편을 마무리 하겠습니다-!😊

반응형

'Java 프로그램' 카테고리의 다른 글

제네릭(Generic) 2편 마무리  (0) 2022.10.12
제네릭(Generic) 1편[제네릭 기본]  (0) 2022.10.12
자바 기본 API 2편 (String Class~~  (2) 2022.09.30
자바 기본 API 1편  (0) 2022.09.30
예외처리(Exception)  (2) 2022.09.20