[Java] StringBuilder 등 유용한 클래스들 import하기

*유용한 클래스들.

 - 문자열 관련 : 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