본문 바로가기

IT일반과목/java

API String, StringBuffer StringBuilder

- API

 -> Application Programming Interface

 -> 프로그래밍을 할때 특정한 기능을 처리할 수 있도록 만들어놓은 클래스나 메소드의 집합

 -> 코딩을 쉽게할 수 있도록 만들어 놓은 것


import java.util.Scanner;


 Scanner sc = new Scanner(System.in);//Scanner형 sc을 참조하고 그 주소를 저장한거랑 똑같


다. 매개변수는 System.in을 썼다.

sc.next();//문자열 입력받은것 -> Scanner 클래스로만들어진 객체에 next()라는 메소드를 호출


한모양이다.

sc.nextInt(); //-> nextInt() 메소드 호출

sc.nextDouble(); //-> nextDouble() 메소드 호출


이걸 보자면 

구글에서 -> oracle.com documentation library -> 쳐보기 -> Oracle help 센터 누르기

->https://docs.oracle.com/en/->java로고 누르기 -> https://docs.oracle.com/en/java/ -> 


Java SE documentation 클릭하기 -> JDK 8로 누르기 -> 우리버전이 JDK8이다. -> All Books 누


르기 -> JAVA SE아래에 API Documentation 누르기 -> 왼쪽 위에는 java.util 선택후 그 아래칸


에 -> Scanner클릭하기 그럼 좋은 말들이 써져있다.


java.lang : 자바프로그래밍을 위한 기본적인 패키지와 클래스를 포함

java.util : 프로그램을 제어하기 위한 클래스, 데이터 저장하기 위한 클래스

java.io : 키보드, 모니터, 프린터, 파일 등을 제어하는 클래스

java.net : 통신관련


패키지명을 java로하면 안되는게 시스템에서 쓰고있어서 그렇다.

 -> API를 사용해서 프로그래밍을 할것이다. 몇가지 해보겠다.


- String, StringBuffer, StringBuilder


String 클래스

 -> 문자열 값을 수정 못함 immutable(불변)

 -> 수정시 수정된 문자열이 새로 할당되어 새 주소를 줌

 -> 문자열을 자주 변경하는 경우 메모리낭비가 심함


StringBuffer 클래스

 -> 문자열 값을 수정할 수 있음 mutable(가변)

 -> 문자열을 자주 변경하는경우 String보다 효율적

 -> 기존문자열에 수정되어 적용

 -> 쓰레드 safe 기능 지원

 ※ 쓰레드 safe : 동시에 한 자원에 접근하지 못하게 잠그는 기능 -> 읽기전용으로 열리게끔 


해주는게 StringBuffer에있다.

            -> 성능저하발생시킬 수 있음.


StringBuffer의 메소드

 -> capacity : 실제 할당된 공간의 크기를 알 수 있음

 -> length() : 실제문자열 길이 가져온다.

 -> reverse() : 문자열을 거꾸로 재배치 한다(12345 -> 54321)

 -> insert() : 문자열의 특정위치에 문자열 추가

 -> append() : 문자열 끝에 문자열 추가

 -> delete() : 문자열 일부 삭제

 -> replace() : 문자열 일부분을 다른 문자열로 대치



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

글자를 넣고 싶다면 append를 추가할수 있다.처음부터 들어갈것이다.

StringBuilder

 -> StringBuffer와 동일

 -> 쓰레드 safe 지원하지 않는다.


API에서는 왜이렇게 되는지 없다. 자바가 만들어서 준거기때문이다.


StringTokenizer 클래스를 해보겠다.

 -> 문자열을 분석해서 토큰으로 분리시켜줌

 -> 파일에 저장된 텍스트를 처리하는 경우에 유용하게 사용함

 -> 생성시 전달받은 문자열을 구분자로 사용하여 각 토큰에 저장


메소드

-> countTokens() : 꺼내지 않고 남아있는 토큰의 수

-> hasMoreTokens() : 남아있는 토큰이 있는지 확인(true/false반환) -> boolean형태

-> nextToken() : 토큰을 하나씩 꺼내옴




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

- Math 클래스

  -> 수학에서 자주 사용하는 상수들과 메소드들을 구현해놓은 클래스

  -> static메소드 -> 객체화할 필요가 없다.

String Buffer sb = new StringBuffer();


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

- Calendar 클래스

  -> 현재 시간이랑 관련있는 클래스


Calendar today = Calendar.getInstance();//new가 없다.이게 바로 Calendar의특징이다.
//생성자가 protected로 되어있다.
//부모객체모양을통햏 자식객체가 만들어진다. 이걸보고 다형성이라하는데 지

금 적용되어있다.
//-> 년,월,일,시,분,초 정보를 다룰 수 있다.
//-> 주의사항 월이 0부터 시작->월 출력시 +1

-> Calendar 클래스의 생성자는 Protected이기 때문에 new를 통해서 객체생성이 불가능
get Instance()메소드를 통해서 객체를 생성
GregorianCalendar -> 객체가 생성된다. -> Calendar클래스의 자식클래스

System.out.println(today.get(Calendar.YEAR));//년정보 가져온다.,get메소드를 호출한것이다.
today.get(Calendar.YEAR);//

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

Date 클래스
 -> 시스템에서 현재 날짜, 시간정보를 가져와서 다루는 클래스
 -> 거의 사용안하고 Calendar을 쓴다.
 -> java.util.Date

SimpleDateFormat 클래스
 -> Date의 날짜, 시간정보를 원하는 format으로 출력하도록 기능을 제공
 -> java.text.SimpleDateFormat

===================================================================
실습문제
Calendar 클래스 사용
오늘 날짜에 대한 객체 생성
년, 월, 일, 시, 분, 초 값을 각각 변수에 분리 저장한 후 하나의 문자열로 출력해보시오

2018년 7월 30일 월요일로 나오면 된다.


====================================================================
package kh.java.test;

import java.util.StringTokenizer;

public class Example {
public void main() {
StringBuffer str = new StringBuffer();
//스트링 버퍼 참조변수 str에 주소값을 가졌다.
// System.out.println(str.length());//길이를 봤다.
//출력하면 0이라고 나온다.만들기만하고 아무문자열도 저장안했기 때문이다.
System.out.println(str.capacity());
//16자리 공간을 저장할수있는걸 만든다.
str.append("kh");
System.out.println("append : "+str);
//kh라는걸 str에 삽입한 것이다.
str.append("java");
System.out.println("append : "+str);
//kh가있고 뒤에 java가 들어가서 khjava가 표시된다.
str.insert(3, "Hello");
//특정위치에 문자열을 추가한다는 것이다.
//3번째 글자뒤에 Hello를 붙여 라는 것이다.
System.out.println("insert 3,Hello : "+str);
str.replace(0, 2, "love");
//첫번째 두번째 글자를 k,h를 love로 바꿔버린 것이다.
//문자열 일부분을 다른 문자열로 대치하는 것이다.
System.out.println("replace 0,2 : "+str);
str.reverse();
//거꾸로 출력하게 해주는 것이다.
System.out.println("reverse : "+str);
str.reverse();
System.out.println("reverse : "+str);
str.delete(11, 12);//11번부터 1개지우라는 것이다.
System.out.println("delete 11,12 : "+str);
str.delete(5, 7);//첫번째는 0부터 시작한다는걸 알고있기 그후 2개 지우는것이다.
System.out.println("delete 5,7 : "+str);
str.append("wwwwwwwwwwwwwwwwww");
System.out.println("append wwwwwwwwwwwwwwwwww : "+str);
str.delete(2, 4);
System.out.println("delete 2.4 : "+str);
str.insert(2, "jongkyu");
System.out.println("insert 2,jongkyu : "+str);
System.out.println("====================================");
String str1 = "홍길동/20/경기도";
StringTokenizer sT = new StringTokenizer(str1,"/");
//str1이라는 문자열을 주었고 구분자로 쓸것이 /이거이다.
// /을 기준으로 토큰단위로 자름
System.out.println(sT.countTokens());
//이렇게 하면 홍길동하고 구분자 하나있고 20 하고 있고 경기도 있다. 그래서 3개가 뜨는 것이다.
//구분자를기준으로 나눠진게 몇개인지 보는것이다.
System.out.println(sT.nextToken());
//첫번째 토큰을 하나 갖고온다.
System.out.println(sT.hasMoreTokens());
//토큰을 하나꺼내고나서 하나 남아있으니 true라고 표시한다.
System.out.println(sT.countTokens());
//토큰 몇개인지 물어본다.
System.out.println(sT.nextToken());
//아까 토큰을 하나 썼으니 이번엔 2번째 토큰을 갖고온다.
System.out.println(sT.hasMoreTokens());
//남아있는 토큰을 본다.
System.out.println(sT.countTokens());
//토큰 몇개인지 물어본다.
System.out.println(sT.nextToken());
//아까 토큰을 하나 썼으니 이번엔 3번째 토큰을 갖고온다.
System.out.println(sT.hasMoreTokens());
//남아있는 토큰을 본다.남은거까지 다 했으니 false가 온다.
System.out.println(sT.countTokens());
//토큰을 다썻으니 남아있는게 없다.
}
}

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


package kh.java.test;

import java.util.StringTokenizer;

public class Example1 {
public void main() {
String str = "J a v a P r o g r a m";
StringBuffer sb = new StringBuffer();
StringTokenizer sT = new StringTokenizer(str," ");
//문제 공백 단위로 빼주기.전부다 대문자로 변경해서 sb에 넣어서 출력하기
//출력은 sb에 담아서 출력하기
char [] ch=new char[sT.countTokens()];

//System.out.println(sb);
//이렇게 했을때 결과가
//JAVAPROGRAM 으로 나오면 된다.
System.out.println(sT.countTokens());//11개가 있다.
for(int i=0; i<ch.length; i++) {
ch[i]=sT.nextToken().charAt(0);
if(ch[i]>=65 && ch[i]<=90) {
}
else {
ch[i]^=32;
}
sb.append(ch[i]);
}
System.out.println(sb);





}
}

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


public void main1() {
System.out.println(Math.abs(-10));//절대값 리턴하는 것이다.
System.out.println(Math.ceil(10.1));//값을 올림해준다.
System.out.println(Math.floor(10.9));//주어진값을 버린다.
System.out.println(Math.random());//소수값을 랜덤으로 출력한다. 0<x<1 임의값
System.out.println(Math.max(10, 20));//최대값을 출력
}




===========================================================================
public void main2() {
Calendar today = Calendar.getInstance();//new가 없다.이게 바로 Calendar의특징이다.
//생성자가 protected로 되어있다.
//부모객체모양을통햏 자식객체가 만들어진다. 이걸보고 다형성이라하는데 지금 적용되어있다.
//-> 년,월,일,시,분,초 정보를 다룰 수 있다.
//-> 주의사항 월이 0부터 시작->월 출력시 +1
System.out.println(today.get(Calendar.YEAR));//년정보 가져온다.,get메소드를 호출한것이다.
today.get(Calendar.YEAR);//
System.out.println(today.get(Calendar.MONTH)+1);//7월이니 현재시간기준으로 갖고온다.
System.out.println(today.get(Calendar.DATE));//오늘 날짜 가져온다.
System.out.println(today.get(Calendar.AM_PM));//오전이면 0 PM이면1이라고 반환해준다.
System.out.println(today.get(Calendar.HOUR));//시간이 뜬다.
System.out.println(today.get(Calendar.MINUTE));//분이 뜬다.
System.out.println(today.get(Calendar.SECOND));//초가 뜬다.
System.out.println(today.get(Calendar.DAY_OF_WEEK));//요일이 뜬다.월요일이니 2가 뜬 것이다.
//Calendar.AM_PM -> 오전이면0, 오후면1
//Calendar.DAY_OF_WEEK -> 1은 일요일, 2는 월요일...7은 토요일
today.set(Calendar.YEAR, 2011);//2011로 바꿔라.
System.out.println(today.get(Calendar.YEAR));//2011을 출력해라.
}
==================================================================
public void main3() {
Date today = new Date();//현재시간을 그대로 갖고온다.
Date today2 = new Date(123456789L);//정수형중 long형태
//long형 정수값을 이용해서 날짜시간을 계산합니다.(밀리초)
//기준은 1970년 1월 1일 09시 00분 00초 를 기준으로 한다.
//123456789L 밀리초가 흘렀을 경우 값이 나오는 것이다.
System.out.println(today);
System.out.println(today2);
/*
* 123456789 밀리초 = 123456.789초, 123456으로 하자면//소수점은 원래 써서 계산해야되는데
* 귀찮아서 버렸다.근사값만 알려고한다.
* 34시간이 지난 다음이다.(60으로 2번 나눠주면된다.)대충 이정도 나오곘다. 
*/
}



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

public void main4() {
Date today = new Date();
SimpleDateFormat t = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat t1 = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
String str1 = t.format(today);
//today 오늘날짜를 세팅해서 str1에 대입한다는 것이다.
String str2 = t1.format(today);
//today 오늘날짜를 세팅해서 str2에 대입한다는 것이다.
System.out.println(str1);//이렇게 할경우 t의 형태가 년월일이기 때문에 이렇게 나온다.
System.out.println(str2);//이렇게 할경우 t1의 형태가 초까지 있어서 이렇게 나온다.
}


======================================================================
public void main5() {
//2018년 7월 30일 월요일로 나오면 된다.
Calendar today = Calendar.getInstance();
int year=today.get(Calendar.YEAR);
int month= today.get(Calendar.MONTH)+1;//7월이니 현재시간기준으로 갖고온다.
int date=today.get(Calendar.DATE);//오늘 날짜 가져온다.
int hour=today.get(Calendar.HOUR);//시간이 뜬다.
int min=today.get(Calendar.MINUTE);//분이 뜬다.
int sec= today.get(Calendar.SECOND);//초가 뜬다.
int day=today.get(Calendar.DAY_OF_WEEK);
String day1 = null;
if(day==1) {
day1="일";
}
else if(day==2) {
day1="월";
}
else if(day==3) {
day1="화";
}
else if(day==4) {
day1="수";
}
else if(day==5) {
day1="목";
}
else if(day==6) {
day1="금";
}
else if(day==7) {
day1="토";
}
System.out.println(year+"년"+month+"월"+date+"일"+hour+"시"+min+"분"+sec+"초"+day1+"요일");
}




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






'IT일반과목 > java' 카테고리의 다른 글

날짜수 계산 더하기 까지  (0) 2018.07.30
API 실습  (0) 2018.07.30
문제풀기  (0) 2018.07.27
자바의 개념 정리(07.02~07.27)  (0) 2018.07.27
예외처리2 try-catch  (0) 2018.07.26