2022. 10. 12. 13:21ㆍJava 프로그램
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의 의미가 있습니다.)
두 개의 출력문에서의 차이가 확연하게 보이는 걸 볼 수 있습니다.
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는 문자열을 지정한 분리문자로 나누고 그 나눈 토큰들을 리턴하는 식으로 실행됩니다.
저는 개인적으로 중간중간 이해안되는 부분이 있으면 전체가 이해하기 찜찜하여 한줄 한줄 번호를 매기며 해보겠습니다.
우선 메소드를 먼저 확인하고 줄마다의 설명을 보겠습니다.
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로 복사한 배열입니다.
코드의 결과를 한번 보겠습니다.
첫 줄 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의 원하는 부분을 복사한 것입니다.
결과를 보겠습니다.
인덱스를 나눠서 보겠습니다.
J | A | V | A |
0 | 1 | 2 | 3 |
이 인덱스에서 시작인덱스는 1 , 끝인덱스는 3 입니다. 복사는 1 부터 시작 되지만 끝인덱스 3에서 -1 을한 2까지 복사가 되므로 AV 만 복사가 됩니다.
참고용으로 메소드 표를 첨부하겠습니다!
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으로 출력 형식을 정해주고 다른 형식으로 시간을 출력하도록 두개의 객체를 만들었습니다.
첫번째 출력은 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 |