import java.util.StringTokenizer;
public class Ex04_StringTokenizer {
public static void main(String[] args){
String str;
String[] ss;
int n;
str = "자바,안드로이드,HTML,스프링,오라클,javascript,JPA";
// 문자열을 토큰으로 구분하여 보냄
StringTokenizer st = new StringTokenizer(str, ","); // 구분자는 출력하지 않음(기본)
// StringTokenizer st = new StringTokenizer(str, ",", true); 구분자도 문자열로 출력
ss = new String[st.countTokens()]; // countTokens() : 보낼 문자열의 총 갯수
n = 0;
while(st.hasMoreTokens()) {
// true if and only if there is at least one token in the string after the current position; false otherwise
// 현재 위치 후에 1개 이상의 토큰이 있으면 true를 반환, 그렇지 않으면 false를 반환하는 boolean 리턴 메소드
ss[n++] = st.nextToken();
// 문자열 0칸부터 차례대로 st에 있는 토큰들을 넣어준다.
}
System.out.println("파싱된 문자열...");
for(int i=0; i<ss.length; i++) {
System.out.println(ss[i]);
}
}
}
public class Ex03_StringBuilder {
public static void main(String[] args) {
Test3 tt = new Test3();
String s;
s = tt.generatePwd();
System.out.println(s);
s = tt.generatePwd();
System.out.println(s);
}
}
class Test3 {
// 10자리 임시 패스워드 만들기
public String generatePwd() { // 가변적인 문자열이므로 Builder나 Buffer를 써야함.
StringBuilder pw = new StringBuilder();
String s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*-+abcdefghijklmnopqrstuvwsyz";
// 원하는 문자를 다 넣어놓음! 저 안에서만 나온다.
int n;
for(int i=0; i<10; i++) {
n = (int)(Math.random() * s.length());
// 0<=난수<s의 길이
// String s에 있는 것중에 하나를 임의적으로 뽑아 그 위치를 숫자로 반환
pw.append(s.substring(n, n+1));
// 그 위치에 해당하는 문자를 pw에 10자리가 될때 까지 붙여준다.
}
return pw.toString();
}
}
public class Ex02_StringBuilder {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("seoul");
String s = sb.toString().toUpperCase();
System.out.println(s);
sb.append("우리나라");
sb.append("대한민국");
sb.append("부산");
System.out.println(sb);
// seoul 앞에 한국 추가
sb.insert(0, "한국"); // 0이 첫번째임
System.out.println(sb);
// seoul 위치를 숫자로 반환
System.out.println(sb.indexOf("seoul")); // 2번에 있음
// seoul 뒤에 인천 추가
sb.insert(sb.indexOf("seoul")+"seoul".length(), "인천");
// 2 + 5 = 7번째에 인천을 추가해라
// 대한민국 삭제 : delete(s, e) -> s인덱스에서 e-1인덱스까지 삭제
sb.delete(sb.indexOf("대한민국"), sb.indexOf("대한민국")+"대한민국".length());
System.out.println(sb);
// 우리나라부터 끝까지 삭제
sb.delete(sb.indexOf("우리나라"), sb.length());
System.out.println(sb);
// 모두 삭제
sb.delete(0, sb.length());
System.out.println(sb);
}
}
String 문자열은 상수풀에 저장(String Constant Pool) 내용불변 (Immutable) 내용이 변경되면 새로운 영역에 메모리를 할당 받아 처리하고 이전 공간은 가비지 컬렉터의 대상이 된다. final 클래스로 하위 클래스를 가질 수 없다.
import java.math.BigInteger;
public class Ex07 {
public static void main(String[] args) {
// BigInteger : 아주 큰 정수를 다루기 위해 제공하는 클래스
BigInteger a = new BigInteger("123456789123456789");
BigInteger b = new BigInteger("123456789123456789");
BigInteger c;
c = a.add(b);
System.out.println("합: "+c);
c = a.subtract(b);
System.out.println("차: "+c);
c = a.multyply(b);
System.out.println("곱: "+c);
c = a.divide(b);
System.out.println("몫: "+c);
c = a.pow(10);
System.out.println("승: "+c);
}
}
public class Ex06{
public static void main(String[] args) {
// Long a1 = 10; 컴파일 오류.
Long a1 = 10L;
long x1 = 10;
Long a2 = new Long(10);
// 생성자로 하지말고 int parseInt(String) 또는 Integer valueOf(String) 사용을 권장.
int t = (int)x1; // long을 int로 캐스팅
// 클래스는 상속관계에서만 캐스팅이 가능하다.
// Long과 Integer은 상속관계가 아니므로 캐스팅이 불가능하다.
// Integer s = (Integer) a1; 컴파일 오류
System.out.println(a1+","+a2);
System.out.println(x1);
System.out.println(t);
double d;
d = Double.parseDouble("123.5"); // String을 double로 변환
System.out.println(d);
d = Double.valueof("123,5"); // String을 double로 변환
System.out.rpitnln(d);
}
}