나의 IT일지
StringTokenizer클래스, Random클래스 본문
자바에서는 개발자들이 개발할 때 사용하기 위한 기본 기능인 API가 구현되어 있으며, import를 통해 클래스를 호출해서 해당 클래스의 메서드를 사용한다.
특히 java.util 패키지는 프로그램 개발에서 자주 사용하는 패키지이기에, 사용자의 편리성을 위해 구현된 클래스들이 모여있어서 자주 사용한다.
클래스 | 용도 |
Calendar | 운영체제의 날짜, 시간의 정보를 수집 |
Date | 특정 시점의 날짜와 시간 정보를 저장 |
Scanner | 문자 데이터를 입력 |
BigDecimal | 정확한 소수점 연산 |
StringTokenizer | 문자열을 구분 문자열 기준으로 분리 |
java.util.StringTokenizer
문자열은 String 클래스를 통해 문자열을 사용할 수 있다. 그리고 이렇게 생성된 문자열의 내용을 나눠서 사용해야 하는 경우가 있다. 그럴때 사용하는 클래스가 StringTokenizer클래스이며, 해당 클래스를 통해 문자열을 토큰으로 나눠서 사용하게 된다.
- 문자열 생성
- String 변수 = "리터널 값"
- 구분할 문자열 생성
- String 변수 = "리터널 값"
- StringTokenizer 객체 생성
- StringTokenizer 변수 = new StringTokenizer(문자열 변수, 구분 문자열 변수)
위의 과정은 StringTokenizer클래스를 사용하는 과정으로, 객체 안에 있는 문자열을 특정 문자열을 기준으로 문자열을 나눠서 토큰으로 만든다. 이때 토큰은 구분문자열을 기준으로 잘린 문자열을 뜻한다.
예를 들면, " kim : 010-1234-5678"를 " : " 기준으로 문자열을 분리할 경우, "kim "과 " 010-1234-5678"인 2개의 토큰을 갖는 객체가 생성된다. 즉, StringTokenizer클래스는 기존의 문자열을 구분 문자열을 기준으로 나눠서 데이터를 사용하기 위한 기능을 가진 클래스로, 여러개의 정보를 가진 문자열을 나눠서 하나의 정보들로 사용하기 위해서 사용한다.
- nextToken(): 다음 토큰으로 이동
- hasMoreTokens(): 다음 토큰이 존재하면 true, 존재하지 않으면 false
- countTokens(); 남은 토큰의 개수확인
package pack0517;
import java.util.StringTokenizer;
public class Code3 {
public static void main(String[] args) {
String str = "kim : 010-1234-5678";
String delim = ":";
StringTokenizer st = new StringTokenizer(str,delim);
System.out.println(st.countTokens());
System.out.println(st.nextToken());
System.out.println(st.hasMoreTokens());
System.out.println(st.countTokens());
System.out.println(st.nextToken());
System.out.println(st.hasMoreTokens());
System.out.println(st.countTokens());
}
}
java.util.Random
Random 클래스는 랜덤으로 숫자를 선택해주는 기능 포함하는 클래스로, 내부적으로 무작위의 값을 추출하기 위한 내부 알고리즘이 존재하며, seed값에 따라 발생하는 난수가 정해져 있다.
그래서 생성자의 매개변수에 seed값을 지정해서 객체를 생성할 경우에 생성되는 객체에 저장되어 있는 값은 동일하다.
반대로, 매개변수에 seed값을 지정하지 않을경우, 객체는 실행할 때 마다 다른 seed값이 가지게 되기에 무작위의 값을 추출하는 것이다.
- nextInt() : int형 난수를 반환
- nextLong( ) : long형 난수를 반환
- nextBoolean() : Boolean형 난수를 반환
- nextDouble( ) : Double형 난수를 반환
- nextFloat( ) : Float형 난수를 반환
- nextInt(숫자): 0이상 숫자미만까지의 정수값의 난수를 반환
- nextFloat(숫자): 0.0이상 숫자미만 실수형 난수를 반환
package pack0517;
import java.util.Random;
public class Code3 {
public static void main(String[] args) {
Random random = new Random();
Random random1 = new Random();
Random random2 = new Random(2);
Random random3 = new Random(2);
for(int i =0;i<5;i++) {
System.out.print("random "+i+"번째 : "+random.nextInt(10)+"\t\t");
}
System.out.println();
for(int i =0;i<5;i++) {
System.out.print("random1 "+i+"번째 : "+random.nextInt(10)+"\t\t");
}
System.out.println();
for(int i =0;i<5;i++) {
System.out.print("random2 "+i+"번째 : "+random2.nextInt(10)+"\t\t");
}
System.out.println();
for(int i =0;i<5;i++) {
System.out.print("random3 "+i+"번째 : "+random3.nextInt(10)+"\t\t");
}
}
}
위의 결과를 보면 random2와 random3가 같은것을 확인할 수 있다. 이는 두 객체의 seed값이 같아서 나타나는 현상으로, seed값이란 random클래스로 만든 객체의 내부상태 초기값으로, 48bit로 구성되어 있다. 즉, seed값이 같게되면, 객체의 내부상태도 같아지기에 같은 값을 추출하는 것이다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
LocalDateTime 클래스 (0) | 2023.05.19 |
---|---|
Calendar클래스, Date클래스 (0) | 2023.05.18 |
Wrapper클래스 (0) | 2023.05.16 |
String클래스, StringBuffer클래스 (0) | 2023.05.12 |
API와 Object 클래스 (0) | 2023.05.11 |