StringBuffer, StringBuilder, StringTokenizer, while, System, currentTimeMillis, getProperty, getenv, arraycopy, Arrays, Wrapper, 오토박싱, 오토언박싱, Random, Date

2019. 3. 15. 16:52JAVA



-----------------------------------------StringBuffer, StringBuilder-------------------------------


   | 속도 | 스레드 안전성 |

stringBuffer X         O // 다른 사용자 및 프로그램이 동시에 사용못하게 Lock(잠금)을 해버린다.



stringBuilder O         X // 항상열려있음


코딩할때 StringBuilder가 속도가 빠르고 스레드안전성을 건들게 거의 없어 StringBuilder를 주로쓴다. 


스레드 안전성이란

동시에 여러사용자?, 프로그램?가 사용을 할때의 안전성





append, toString 이 두메소드가 StringBuffer, StringBulid에 가장 중요한 메소드이다.

toString : 이 메소드는 StringBuffer, StringBuild 의 임시저장소에 여러 문자열이있는걸 하나로 쭉이어서 만들어준다

append : 문자열을 뒤에서부터 쌓아주는 메소드


public class StringBuilderDemo {


public static void main(String[] args) {

String title = "이것이 자바다";

String writer = "신용권";

int price = 30000;

String text = "제목:"+title+", 저자:"+writer+", 가격:"+price;

System.out.println(text);


// 기존에는 위에처럼 했지만 아래로 가능하다.

// 한두개는 +해도 괜찮다.


StringBuilder sb = new StringBuilder();

sb.append("제목");

sb.append(title);

sb.append("저자");

sb.append(writer);

sb.append(", 가격");

sb.append(price);

String text2 = sb.toString();

System.out.println(text2);

// System.out.println(sb); // 써도 객체는 Object 에서 쓴것처럼 자동적으로 toString이 되기 때문에 이것도 같은값 가능

}

}

----------------------------결과--------------------------------

제목:이것이 자바다, 저자:신용권, 가격:30000

제목이것이 자바다저자신용권, 가격30000







-------------------------------------StringTokenizer------------------------


StringTokenizer란

문자열을 조각조각 분화해서 가지는것을 StringTokenizer(토큰화)라고한다.

배열형(값을 여러개 가지고있는것)을 가지고있다.



예시) 토큰화 예시

String text = "홍길동,김유신,이순신";

String[]Item = text.split(","); // 이러면 토큰화 한것이다.




예시)같은 배열형

배열

콜렉션

for(타입 변수명 : 배열) {...}

for(타입 변수명 : 콜렉션){...}

(위 두개는 for이 제격)


StringTokenizer

boolean .hasMoreTokens()

String .nextToken()

while (x.haseMoreTokens()) {

String value = x.nextToken();

...

}


Enumeration

boolean hasMoreElements()

E .nextElement()


while (x.haseMoreElements()) {

E e = x.nextElement();

...

}


Iterator

boolean .hasNext()

E next()

ResultSet

boolean next()

xxx .getxxx(String name)


hasMore 이 참일때 nextToken이 실행이 되야하므로 이때는 주로 while문을 사용한다.

(초기값, 증감식 없이 조건만 있어서 제격)

---------------while------------------------------


형식

while (조건식) {

조건식;

조건식;

}


조건식이 true로 판정되면 수행문을 싱행한다.

break를 사용해서 반복을 탈출할 수 있다.



실행순서

조건식 -> 수행문 -> 조건식 -> 수행문.......



무한루프 생성 조건

while (true) {

수행문;

수행문;

}


----------------------------------------------------






#주로 사용되는 것들#


주요 생성자

StringTokenizer(String text)

전달받은 문자열을 공백을 구문문자로 사용해서 자른다.


StringTokenizer(String text, String delim)

전달받은 문자열을 지정된 구문문자를 사용해서 자른다.



주요메소드

boolean .hasMoreToken()

다음에 꺼낼 토큰이 있으면 true를 반환

String .nextToken()

토큰을 반환한다.

int .countToken()

토큰의 갯수를 반환한다.




예시)메소드 사용 예시--------------------------------------

package demo4;


import java.util.StringTokenizer;


public class StringTokenizerDemo {


public static void main(String[] args) {

StringTokenizer st = new StringTokenizer("김유신 강감찬 이순신 홍길동");

int count = st.countTokens();

System.out.println("토큰갯수 : "+count);

while (st.hasMoreTokens()) {

String name = st.nextToken();

System.out.println(name);

}

StringTokenizer st2 = new StringTokenizer("1,2,3,4,5,6,7,8,9,10", ",");

int total = 0;

while (st2.hasMoreTokens()) {

total += Integer.parseInt(st2.nextToken());

}

System.out.println(total);

}

}

--------------------------결과--------------------------------------------

토큰갯수 : 4

토큰이 남아있나? true

김유신

강감찬

이순신

홍길동

55

============================================




-------------Split(",") 와 StringTokenizer(String text, ",")의 차이----------


예시 )            이름, 전화,이메일,회사

입력 -> ""이응수,010-1111-1111,,중앙HTA"


split -> ["이응수","010-1111-1111","","중앙HTA"]

StringTokenizer -> ["이응수","010-1111-1111","중앙HTA"]



예시)-------------------------------------------------------------

String text = "홍길동,010-1111-1111,,중앙HTA";

String[] value = text.split(",");

StringTokenizer str3 = new StringTokenizer(text, ",");

System.out.println("배열의 길이 : "+value.length);

System.out.println("토큰의 길이 : "+str3.countTokens());

-------------------결과-------------------------------------------------

배열의 길이 : 4

토큰의 길이 : 3

==========================================






-----------------------------------------System 객체--------------------------------------------------


System객체를 사용하면 컴퓨터와 연결되어 출력 및 입력이 가능하다.


필드는 in, out, err이다.

in - 표준 입력을 받는다.

out - 표준 출력을 한다.

err - 표준 에러를 출력한다.



자주 사용하는 메소드

exit(int status)  - system즉시 종료



currentTimeMillis() - 컴퓨터의 현재 시간정보(유닉스 타임) 가있다. (1970년 1월 1일부터 0.001초 단위로 나옴)

(자주사용) 예시)----------------------------------------------------------

long time = System.currentTimeMillis();

System.out.println(time/3600/24/365/1000);

System.out.println(time);

-------------------------결과----------------------------------

49

1552627009722

======================================


년 계산 = currentTimeMillis()/1000/3600/24/365;

예시 ) 이력서 지원 이름 저장할때

String originalFilename = "홍길동.jpg"

String saveFilename = System.currentTimeMillis() + originalFilename;

즉 매번 다른이름 (주문내역 등)을 저장해야할때 자주 사용



getProperty() - 시스템의 속성값을 가져온다


예시)-------------------------------------------------------------

String value1 = System.getProperty("java.version");

String value2 = System.getProperty("os.name");

String value3 = System.getProperty("user.name");

String value4 = System.getProperty("user.home");

System.out.println("자바버전 : "+value1);

System.out.println("OS이름 : "+value2);

System.out.println("사용자 이름 : "+value3);

System.out.println("사용자 홈 디렉토리 : "+value4);

----------------------------결과---------------------------------------

자바버전 : 1.8.0_202

OS이름 : Windows 10

사용자 이름 : 이재헌

사용자 홈 디렉토리 : C:\Users\이재헌

==========================================



getenv() - 컴퓨터의 환경변수(시스템 - 시스템속성 - 환경변수)를 읽어온다.

예시)----------------------------------------------------------------

String env1 = System.getenv("JAVA_HOME");

String env2 = System.getenv("PATH");

System.out.println("자바홈 : "+env1);

System.out.println("패스 : "+env2);

---------------------------------결과---------------------------------

자바홈 : C:\Program Files\Java\jdk1.8.0_202

패스 : C:/Program Files/Java/jre1.8.0_202/bin/server;C:/Program Files/Java/jre1.8.0_202/bin;C:/Program Files/Java/jre1.8.0_202/lib/amd64;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;JAVA_HOME\bin;C:\Users\이재헌\AppData\Local\Microsoft\WindowsApps;C:\Program Files\Bandizip\;C:\eclipse;

==========================================



arraycopy() - 배열을 복사하는것

예시)-------------------------------------------------------------

package demo4;


import java.util.Arrays;


public class SystemDemo3 {


public static void main(String[] args) {

// 배열복사

// void System.arraycopy(Object src, int srcPost, Object dest, int destPos, int length)

// src : 원본배열

// srcPos : 원본배열의 복사 시작위치

// dest : 목적지 배열

// destPos : 목적지 배열의 데이터 삽입 시작위치

// length : 복사할 배열의 아이템 갯수

String[] src = {"사과", "배", "바나나","토마토","레몬","감","포도","오렌지","멜론"};

String[] dest1 = new String[5];

String[] dest2 = new String[10];

System.arraycopy(src, 3, dest1, 0, 5);

// src 배열의 3번째부터 복사를 dest1배열의 0번째부터 5개 복사할것이다.

System.arraycopy(src, 0, dest2, 4, 6);

// src 배열의 0번째부터 복사를 dest2배열의 4번째부터 6개를 복사할것이다.

System.out.println(Arrays.toString(dest1));

System.out.println(Arrays.toString(dest2));

}

}

--------------------------------------결과-------------------------------

[토마토, 레몬, 감, 포도, 오렌지]

[null, null, null, null, 사과, 배, 바나나, 토마토, 레몬, 감]

==========================================




------------------------------Arrays--------------------------------------

Arrays.sort(String[] string) - 배열을 오름차순으로 정렬해준다.

예시)------------------------------------------------------------------

int[] scores = {10, 30, 1, 7, 31, 46, 5};

Arrays.sort(scores);

System.out.println(Arrays.toString(scores));

String[] name = {"홍길동","이순신","강감찬","김유신","유관순","김구"};

Arrays.sort(name);

System.out.println(Arrays.toString(name));

-------------------------결과----------------------------------------------

[1, 5, 7, 10, 30, 31, 46]

[강감찬, 김구, 김유신, 유관순, 이순신, 홍길동]


=============================================




---------------------------------Wrapper 클래스-------------------------------------


Wrapper 클래스의 용도

colloection을 사용할경우 콜렉션은 객체만 들어갈수 있는데 일반자료형은 객체가 아니라서 그럴때 사용


기본타입 | 포장클래스

      ------------------------------------------------------

byte | Byte

char | Character

short | Short

int | Integer

long | Long

float | Float

double | Double

boolean | Boolean

       -------------------------------------------------------




예시)----------------------------------------------------------------

Integer num1 = new Integer(30); // 박싱(Boxing)

Integer num2 = new Integer("30"); // 박싱

// 정수값 획득 : int intValue()

int value1 = num1.intValue(); // 언박싱(Unboxing)

int value2 = num2.intValue(); // 언박싱

System.out.println(value1);

System.out.println(value2);

// 실수값 획득 : double doubleValue();

Double num3 = new Double(3.14); // 박싱

Double num4 = new Double("3.14"); // 박싱

double value3 = num3.doubleValue(); // 언박싱

double value4 = num4.doubleValue(); // 언박싱

System.out.println(value3);

System.out.println(value4);

---------------------------------------------------------------------

30

30

3.14

3.14






오토 박싱, 오토 언박싱(자동 박싱과 언박싱)


오토박싱--------------------------------------------

예전 ) Integer num1 = new Integer(30);

오토박싱) Integer num1 = 30;


예전) Double c = new Double(3.14);

오토박싱) Double c = 3.14;



오토언박싱------------------------------------------

예전 ) int value1 = num1.intValue();

오토언박싱 ) int value 1 = num1;


예전 ) double value4 = num4.doubleValue();

오토언박싱 ) double value4 = num4;


예전 ) public void plus(Integer x, Integer y) {

int z = x + y;

}


오토언박싱 ) public void plus(Integer x, Integer y) {

int z = x.intValue() + y.intValue();

}




----------------------Random 객체----------------------------------


실행할때마다 다른수를 나오게 하기위해 사용



예시)---------------------------------------------------------------

package demo4;


mport java.util.Random;


public class RandomExample {


public static void main(String[] args) {

// 난수를 발생시키는 Random객체 생성

Random random = new Random();

// int 범위의 최소값과 최대값 사이의 임의의 정수를 제공

int num1 = random.nextInt();

System.out.println(num1);

// int nextInt(int max) : 0 <= 난수 < max 범위의 난수 제공

int num2 = random.nextInt(100); //0 <= 난수 < 100

System.out.println(num2);

int num3 = random.nextInt(6)+1; // 주사위 숫자 출력

System.out.println(num3);

}

}


----------------------결 과-----------------------------------

471439767

91

4

====================================






-------------------------Date 객체------------------------------------


Date는 자바에 2개가 있는데 java.spl과 java.util이있는데 spl은 날짜만 util은 날짜와 시간이있어 대부분 java.util을 사용한다.




예시)---------------------------------------------------------------------------

package demo4;


import java.util.Date;


public class DateDemo {


public static void main(String[] args) {

Date now = new Date();

// 컴퓨터의 현재 날짜 및 시간정보를 갖고 있는 Date객체가 생성된다.

System.out.println(now); // .toString 생략

System.out.println(now.toString()); // Date의 toString()은 날짜와 시간정보를 문자열로 제공하도록 재정의되어 있다.


long value = now.getTime(); // System.currentTimeInMills() 와 같은것

System.out.println(value);

now.setTime(1000000000000L); // 밀리초로 바뀌고 그 해당 초의 날짜로 바뀐다.

System.out.println(now);

}

}

--------------------결과----------------------------------------------------

Fri Mar 15 16:36:55 KST 2019

Fri Mar 15 16:36:55 KST 2019

1552635415646

Sun Sep 09 10:46:40 KST 2001


============================================