*유용한 클래스들.
- 문자열 관련 : String, StringBuffer, StringBuilder, StringTokenizer
- 수학 : Math
- 날짜 : Calendar, Date, LocalDate, LocalTime, Period, Duration
- 형식 : SimpleDateFormat, Decimal
- 난수 : Random
- 지역 : Local
*String
-짧은 문자열을 다룰 때 사용하는 클래스. ( 중복문자열을 저장하지 않는다.,String literal에 생성)
String csvData=“자바,오라클,JDBC,HTML,CSS”;
String[] arr=csvData.split(“,”);
*StringBuffer, StringBuilder
-긴 문자열을 다룰 때 사용하는 클래스.
StringBuffer : JDK1.0에서부터 제공. 속도가 느림.( 동기화 처리 – multi-thread에서 동시접근 불가능)
StringBuilder : JDK1.5에서부터 제공. 속도가 빠르다.(동기화 x - multi-thread에서 동시접근 가능)
package day0207;
/**
* 긴 문자열을 다루기.
* StringBuffer, StringBuilder : 문자열을 heap에 생성하고, method를 호출하면
* heap생성된 문자열에 직접 작업을 한다. 긴 문자열을 작업(+) 할 때 속도가 String보다 빠르다.
*/
public class UseStringBuilder {
public void useStringBuilder() {
//1.생성)
StringBuilder sb=new StringBuilder();
//2.method 호출)
//값을 추가) - 기존의 값 뒤에 붙기 때문에 원본 문자열이 계속 변경된다.
sb.append("안녕 하세요?");
sb.append(25).append("년");
//값 삽입) insert(시작인덱스, 추가할값)
sb.insert(7, "올해는 ");
//값삭제) delete( 시작인덱스, 끝인덱스+1)
sb.delete(2, 6);
//문자열의 순서변경( 뒤에 글자가 앞으로 올 수 있게)
sb.reverse();
System.out.println( sb );
}//useStringBuilder
public void useStringBuffer() {
//1.생성)
StringBuffer sb=new StringBuffer();
//2.method 호출)
//값을 추가) - 기존의 값 뒤에 붙기 때문에 원본 문자열이 계속 변경된다.
sb.append("안녕 하세요?");
sb.append(25).append("년");
//값 삽입) insert(시작인덱스, 추가할값)
sb.insert(7, "올해는 ");
//값삭제) delete( 시작인덱스, 끝인덱스+1)
sb.delete(2, 6);
//문자열의 순서변경( 뒤에 글자가 앞으로 올 수 있게)
sb.reverse();
System.out.println( sb );
}//useStringBuffer
public static void main(String[] args) {
UseStringBuilder usb=new UseStringBuilder();
System.out.println("---------StringBuilder 사용---------------------------");
usb.useStringBuilder();
System.out.println("---------StringBuffer 사용---------------------------");
usb.useStringBuffer();
}//main
}//class
콘솔 출력
---------StringBuilder 사용---------------------------
년52 는해올?녕안
---------StringBuffer 사용---------------------------
년52 는해올?녕안
문자열
package day0210;
import java.util.StringTokenizer;
/**
* 문자열을 짧은 하나의 마디로 구분하는 StringTokenizer의 사용.
*/
public class UseStringTokenizer {
public UseStringTokenizer() {
String data="안녕 하세요? 오늘은 월요일 입니다.";//자르기위한 대상 문자열
//주소를 할당, StringTokenzier를 문자열을 가지고 있지 않다.
StringTokenizer stk=new StringTokenizer(data); //공백으로 토큰을 구분하는 생성자
System.out.println(stk);
//포인터가 있는 위치에서 잘려질 수 있는 토큰이 몇개인가?
System.out.println( stk.countTokens() );
String token="";
while( stk.hasMoreTokens() ) {//토큰이 존재하는 지 ?
token=stk.nextToken(); //토큰을 얻고, 포인터를 다음으로 이동시킨후
System.out.println(token);
}//end while
System.out.println("남은 토큰 "+ stk.countTokens() );//잘려질 수 있는 토큰이 몇개인가?
data="Java,Oracle,JDBC.HTML,CSS.JavaScript~jQuery,Vue.js~Servlet!JSP";
//특정문자로 토큰을 생성하는 생성자 사용.
StringTokenizer stk2=new StringTokenizer(data, ",.~!",false);
System.out.println(data+"를 전달 했을 때 토큰의 수 "+ stk2.countTokens());
while( stk2.hasMoreTokens() ) {//토큰이 존재하면 (true )
// stk2.nextToken(); //method 한번 사용할 때마다 포인터가 이동하게 된다.
System.out.println( stk2.nextToken() );
}//end while
// String email="dsajklasdfjklfkjlfjkl@dkdk.co.kr";
//
// StringTokenizer stk3=new StringTokenizer(email,"@.");
// while( stk3.hasMoreTokens() ) {//토큰이 존재하면 (true )
// System.out.println( stk3.nextToken() );
// }//end while
//
}//UseStringTokenizer
public static void main(String[] args) {
new UseStringTokenizer();
}//main
}//class
콘솔 출력
java.util.StringTokenizer@279f2327
5
안녕
하세요?
오늘은
월요일
입니다.
남은 토큰 0
Java,Oracle,JDBC.HTML,CSS.JavaScript~jQuery,Vue.js~Servlet!JSP를 전달 했을 때 토큰의 수 11
Java
Oracle
JDBC
HTML
CSS
JavaScript
jQuery
Vue
js
Servlet
JSP
수학
package day0207;
/**
* Math.
* 객체화할 수 없고, 제공되는 method를 호출하여 일을 수행하는 클래스.
*/
public class UseMath {
public static void main(String[] args) {
// Math math=new Math();// 생성자가 없음.
int i=-7;
double d=-2.7;
int iResult=Math.abs(i);
double dResult=Math.abs(d);
System.out.println(i+"의 절대값 "+ iResult);
System.out.println(d+"의 절대값 "+ dResult);
d=2.7;// 소수점 이하 첫번째 자리에서만 반올림
System.out.println(d+" 반올림 "+ Math.round(d));
d=2.0000001;
System.out.println(d+" 올림 "+ Math.ceil(d));
d=2.7;
System.out.println(d+" 내림 "+ Math.floor(d));
System.out.println(d+ " 실수부를 절사 "+ (int)d);
//난수
d=Math.random();
System.out.println("발생한 난수 : "+ d );
System.out.println("범위의 난수 : "+ d*10 );
System.out.println("범위의 난수 정수만 얻기 : "+ (int)(d*10) );
//객체생성
UseMath um=new UseMath();
//비밀번호를 char[]에 저장
// char[] tempPass=um.createPassword();
//콘솔에 출력
um.printPassword(um.createPassword());
}//main
//비밀번호 생성 반환method
public char[] createPassword() {
//비번 8자 : 대문자(65~90), 소문자(97~122), 숫자(48~57)
char[] tempPass=new char[8];
String temp=
"QWERTYUIOASDFGHJKLZXCVBNMqwertyuiopasdfghjkzxcvbnm123456789~!@#$%^&*";
for(int i= 0 ; i < tempPass.length ;i++) {
tempPass[i]= temp.charAt((int)(Math.random()*temp.length()));
}//end for
return tempPass;
}//createPassword
//매개변수로 입력된 비밀번호 출력 method
public void printPassword(char[] tempPass ) {
System.out.println(tempPass);
}//end printPassword
}//class
콘솔 출력
-7의 절대값 7
-2.7의 절대값 2.7
2.7 반올림 3
2.0000001 올림 3.0
2.7 내림 2.0
2.7 실수부를 절사 2
발생한 난수 : 0.5617702860564852
범위의 난수 : 5.617702860564852
범위의 난수 정수만 얻기 : 5
4Zwdk84k
날짜
package day0210;
import java.util.Date;
public class UseDate {
public UseDate() {
System.out.println(System.currentTimeMillis());
System.out.println(System.nanoTime());
Date date=new Date();// 시스템의 날짜를 연산하여,현재날짜 정보를 가진 객체가 생성
System.out.println( date );
//현재날짜가 아닌 다른 날짜를 얻을 때
//1000*초*분*시*일*월*년
System.out.println(1000L*60*60*24*30*12*10);//연산결과가 21억을 초과하면 int는
// 값을 저장할 수 없기때문에 long으로 연산한다.
Date date2=new Date(System.currentTimeMillis()+(1000L*60*60*24*30*12*10));
System.out.println(date2);
//어제
Date date3=new Date(System.currentTimeMillis()-(60*60*24*1 *1000));
System.out.println(date3);
}//UseDate
public static void main(String[] args) {
new UseDate();
}//main
}//class
콘솔 출력
1743847078653
423819768424500
Sat Apr 05 18:57:58 KST 2025
311040000000
Mon Feb 12 18:57:58 KST 2035
Fri Apr 04 18:57:58 KST 2025
형식
package day0210;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
/**
* SimpleDateFormat
* letter 반복하여 pattern을 만들고, pattern을 일정 foramt로 만들어 원하는 형식의
* 날짜를 만드는 일.
*/
public class UseSimpleDateFormat {
public UseSimpleDateFormat() {
//1.SimpleDateFormat 생성. ( DateFormat생성 -> SimpleDateFormat생성 : is a 관계)
SimpleDateFormat sdf=
new SimpleDateFormat("yyyy-MM-dd a HH,kk,KK,hh : mm : ss EEEE ",
Locale.KOREA);
//Locale을 사용하면 다른 나라의 날짜형식을 얻을 수 있다.
//2.method 호출)
//부모의 format method를 Date클래스에 객체를 넣어 호출
//( 코드의 재사용성, DateFormat과 Date가 has a 관계를 가진다. )
String formatDate=sdf.format(new Date());
System.out.println( formatDate );
String temp=new SimpleDateFormat("MM-dd-yy")
.format(new Date());
System.out.println( temp );
}//UseSimpleDateFormat
public static void main(String[] args) {
new UseSimpleDateFormat();
}//main
}//class
콘솔 출력
2025-04-05 오후 18,18,06,06 : 58 : 47 토요일
04-05-25
난수
package day0211;
import java.util.Random;
public class UseRandom {
public UseRandom() {
//1.객체 생성
Random r=new Random();
Random r2=new Random( r.nextLong() );//seed random
//정수의 난수 얻기
int i=r.nextInt(); //-21억 ~ +21억
System.out.println("발생한 값 : " + i );
System.out.println("범위의 난수 값 :" + i % 10 );//10개의 난수 발생 -9 ~ 9
System.out.println("범위의 난수 값에서 양수만 :" + Math.abs(i % 10) );//10개의 난수 발생 -9 ~ 9
System.out.println( r.nextInt(10) ); // 범위의 난수
System.out.println( r2.nextInt() );
double d=r.nextDouble();
System.out.println("발생한 값 : "+ d );
System.out.println("범위 값 : "+ d*10 );
System.out.println("범위 값에서 정수 : "+ (int)(d*10) );
System.out.println( r.nextBoolean() );
System.out.println( r.nextBoolean() );
}//UseRandom
public static void main(String[] args) {
new UseRandom();
}//main
}//class
콘솔 출력
발생한 값 : -1658285656
범위의 난수 값 :-6
범위의 난수 값에서 양수만 :6
3
29363594
발생한 값 : 0.0345923575424022
범위 값 : 0.34592357542402197
범위 값에서 정수 : 0
true
true
지역 - 내부 클래스를 변수로 내부에서 사용
package day0207;
/**
* 안쪽 클래스를 지역변수처럼 사용할 때.
*/
public class Local {
int outI;
public Local() {
System.out.println("바깥 클래스의 생성자");
}//Local
public void methodA(int paramA, int paramB) {
int localA=0;
int localB=0;
// paramA=16;
// localA=11;
/////////지역클래스 시작/////////////////////////////////
class Inner{
int i;
public Inner() {
System.out.println("Local 클래스 생성자");
}
public void method() {
System.out.println("method호출 "+i);
//외부클래스의 자원(instance 변수,method)는 사용가능
System.out.println(outI);
//JDK1.8에서는 Local class에서 사용하는 parameter나 local variable에는
//final 접근지정자가 설정되어있다고 간주한다. 값사용은 가능하나
//값할당은 할 수 없다.
// paramA=11;
// localA=16;
System.out.println("paramA : "+ paramA+ ", paramB : "+ paramB);
System.out.println("지역변수 localA : "+ localA+ ", localB : "+ localB);
}
}//class
/////////지역클래스 끝/////////////////////////////////
//생성
Inner in=new Inner();
in.i=20;
in.method();
}//methodA
public static void main(String[] args) {
//바깥 클래스를 객체화
Local lo=new Local();
lo.methodA(2, 7);
}//main
}//class
콘솔 출력
바깥 클래스의 생성자
Local 클래스 생성자
method호출 20
0
paramA : 2, paramB : 7
지역변수 localA : 0, localB : 0
안쪽 클래스를 인스턴스 변수처럼 사용
package day0207;
/**
* 안쪽 클래스를 인스턴스 변수처럼 사용할 때.
*/
public class Outer {
int outI;
public Outer() {
System.out.println("바깥 클래스의 생성자");
}//Outer
public void outMethod() {
//inI=10;//안쪽클래스의 자원은 직접 사용불가.
// inMethod();
//바깥클래스에서 안쪽클래스의 자원을 사용할려면 안쪽클래스를 객체화하여 사용.
Inner in=this.new Inner();
in.inI=10;
in.inMethod();
}//outMethod
////////////////////Inner class 시작////////////////////////////////////////////
public class Inner{
int inI;
public Inner() {
System.out.println("Inner class 생성자");
}
public void inMethod() {
System.out.println("안쪽클래스의 method");
//안쪽클래스에서는 바깥 클래스의 자원을 사용할 수 있다.
outI=2025;
System.out.println("바깥 클래스의 변수 "+ outI);
}
}//class
////////////////////Inner class 끝////////////////////////////////////////////
public static void main(String[] args) {
//객체화
//1. 외부클래스를 객체화 : 바깥클래스명 객체명=new 바깥클래스생성자();
Outer out=new Outer();
//2. 외부클래스의 객체를 사용하여 내부클래스의 객체를 생성한다.
// Inner in=new Inner();//일반객체화할 수 없다.
//바깥클래스명.안쪽클래스명 객체명=바깥클래스의객체명.new 안쪽클래스생성자();
// Outer.Inner in=out.new Inner();
// in.inMethod();
out.outMethod();
}//main
}//class
콘솔 출력
바깥 클래스의 생성자
Inner class 생성자
안쪽클래스의 method
바깥 클래스의 변수 2025
안쪽 클래스를 Static변수처럼 사용
package day0207;
/**
* 중첩클래스 : 안쪽 클래스를 static 변수처럼 사용할 때
*/
public class Nested {
int outI;// instance variable
static int outJ; //static variable
public Nested() {
System.out.println("중첩클래스의 외부 클래스");
}//Nested
public void outMethodA() {
System.out.println("외부클래스의 instance method");
}//outMethodA
public static void outMethodB() {
System.out.println("외부클래스의 static method");
}//outMethodB
//////////////////중첩클래스 시작////////////////////////////////////////////////////
static class Inner{
static int inI;
public static void inMethod() {
//안쪽클래스에서 바깥클래의 자원 사용.
// outI=20;
//static 영역은 클래스 실행시 가장 먼저 로딩되기 때문에 instance 영역을 사용할 수 없다.
outJ=20;
outMethodB();
}//inMethod
}//class
//////////////////중첩클래스 끝////////////////////////////////////////////////////
public static void main(String[] args) {
//중첩클래스는 static으로 구성되기 때문에 객체화없이 직접 호출 가능.
Inner.inMethod();
}//main
}//class
콘솔 출력
외부클래스의 static method
'Java' 카테고리의 다른 글
[Java] Layout - Grid,Flow,Multi (0) | 2025.03.20 |
---|---|
[Java] ArrayList,Scanner (0) | 2025.03.19 |
[Java] Array,Variable Array (0) | 2025.03.16 |
[Java] Method Overroad, this (0) | 2025.03.14 |
[Java] Method - Instance ,Static,Variable 및 4가지 형태 (0) | 2025.03.13 |