[API]String, Wrapper, Date, Calendar

EUNJI LEE·2023년 4월 12일
0

JAVA

목록 보기
7/12

String 클래스

하나의 자료형으로 사용 가능한 클래스로 문자열 값이 수정되지 않는 불변 문자열이다. String의 값을 수정하면 값 자체가 수정된 것이 아니라 새로운 저장소에 수정하려는 값이 저장된 것이다.

String str="LEE";
System.out.println(str); //LEE 출력
System.out.println("수정 전 : "+str.hashCode()); //수정 전 : 50536232
str+=" JI";
System.out.println(str); //LEE JI 출력
System.out.println("수정 후 : "+str.hashCode());
//수정 후 : -1073280101 ->저장소 자체가 바뀐 것
  • String 클래스 사용
    1. String.concat("문자열"); : 두 개의 문자열을 합쳐주는 메소드 앞,() 두개가 합쳐진다.

      String test="GDJ64";
      test=test.concat(" LEEJI");
      System.out.println(test); //GDJ64 LEEJI 출력
    2. String.contains("문자열"); : 문자열에 매개변수로 전달된 문자열이 포함되어있는지 확인해주는 기능

      if(test.contains("64")) //문자열에 64가 있는지 없는지 확인하고 boolean형 반환
    3. String.indexOf("문자열"); : 문자열에 매개변수로 전달된 문자가 있는지 확인하고 인덱스 번호를 반환해준다.
      lastIndexOf("문자열"); : 뒤에서부터 실행한다.

         System.out.println(test.indexOf("E")); //7
          System.out.println(test.lastIndexOf("E")); //8

      💡 System.***out***.println(test.indexOf("이")); 를 실행하면 -1이 출력 된다. 없는 값은 -1로 나오기 때문에 없는 값을 찾아낼 때 사용할 수 있다. 파일명을 찾아낼 때 . 을 기준으로 찾아내는 용도로 자주 사용한다.

    4. String[] split(String) : 특정 구분자(기호)로 구분할 수 있는 문자열을 구분해서 배열로 만든다.

      test="LEE,26,서울시,여";
      String[] result=test.split(",");
      for(String d:result) {
      	System.out.print(d+" "); //LEE 26 서울시 여 출력
      }
    5. String.replace("찾을값","대체할값") : 특정문구를 대체문구로 바꿔준다.

      test="LEE JI";
      String testStr=test.replace("LEE","KIM");
      System.out.println(test); //LEE JI
      System.out.println(testStr); //KIM JI
    6. String.join("구분자",배열) : 배열을 특정 구분자를 이용해서 문자열로 만들어준다.

      String[] testArr= {"YOO","KIM","LEE","PARK","CHOI"};
      		test=String.join("-",testArr);
      		System.out.println(test); //YOO-KIM-LEE-PARK-CHOI
    7. subString(시작인덱스번호, 끝인덱스번호) : 시작인덱스부터 끝인덱스까지 문자열을 잘라내는 기능

      test="test.png";
      testStr=test.substring(test.indexOf(".")+1); //png
      💡 시작 인덱스를 포함해서 잘라내고 끝 인덱스는 포함하지 않기 때문에 파일명을 구할 때 indetOf와 함께 사용하는 경우가 많다.
    8. toUpperCase(), toLowerCase() : 문자열을 대문자, 소문자로 바꿔주는 기능

      test="AbcdE";
      testStr=test.toUpperCase();
      System.out.println(testStr); //ABCDE
      testStr=test.toLowerCase();
      System.out.println(testStr); //abcde
    9. trim() : 문자열의 양쪽 공백을 제거해주는 메소드

      test="     Hello, java";
      System.out.println(test); //     Hello, java
      testStr=test.trim();
      System.out.println(testStr); //Hello, java
    10. valueOf() : 기본자료형을 String으로 변환해주는 기능

      int age=26;
      test=String.valueOf(age);
      System.out.println(test); //26
      ✅ 콘솔 화면에서 보면 변환하기 전이랑 똑같이 26이 출력되는 것으로 보이겠지만 자료형이 int형에서 String형으로 변경됐다.

StringBuffer 클래스

클래스 사용 방식으로 문자열을 다룰 수 있으며 가변 문자열이다. 문자열을 수정, 저장하면 값의 주소는 변경되지 않고 저장된 데이터 자체가 수정이 된다.

StringBuffer sb=new StringBuffer("LEEJI");
System.out.println(sb); //LEEJI 출력
System.out.println("수정 전 : "+sb.hashCode()); //수정 전 : 1554547125
System.out.println("수정 후 : "+sb.hashCode()); //수정 후 : 1554547125
  • StringBuffer 클래스 사용
    1. append("문자열") : 문자열을 추가하는 메소드

      StringBuffer testSb=new StringBuffer();
      System.out.println(testSb); //아무것도 출력되지 않음.
      System.out.println(testSb.length());
      testSb.append("StringBuffer Test!");
      System.out.println(testSb); //StringBuffer Test!
    2. insert(인덱스번호, "문구") : 특정위치에 문구를 추가

      testSb.insert(0,"It's ");
      System.out.println(testSb); //It's StringBuffer Test!
      testSb.insert(testSb.indexOf("!"), "?");
      System.out.println(testSb); //It's StringBuffer Test?!
    3. delete(시작인덱스, 끝인덱스) : 해당 위치에 있는 값을 삭제
      deleteCharAt(인덱스번호) : 한글자만 삭제

      ```java
      testSb.delete(0, 5);
      System.out.println(testSb);//StringBuffer Test?! ->끝자리는 포함하지 않음
      ```
    4. setCharAt(인덱스번호,'수정할문자') : 해당 인덱스 번호의 문자를 수정

      testSb.setCharAt(13, 'B');
      System.out.println(testSb); //StringBuffer Best?!
    5. length() : 문자열의 길이 출력

      System.out.println(testSb.length());

StringTokenizer 클래스

String 클래스에서 제공하는 split() 메소드와 같은 기능을 하는 클래스로 생성 시 전달 받은 문자열을 구분자로 나눠서 각 토큰에 저장해준다. StringTokenizer(String형,"구분할 문자"); 형태로 사용할 수 있고, 구분자는 하나 이상 넣어도 구분해준다.

test="java,orcle,html/scc/javascript/jquery,servlet/jsp";
StringTokenizer st=new StringTokenizer(test,",/");
while(st.hasMoreElements()) {//Element가 있는지 확인
		System.out.println(st.nextElement());
		//String name=sc.nextToken();
		//System.out.println(st.nextElement); ->두 번 가져온 것과 같다.
}

Wrapper 클래스

기본 자료형을 객체로 사용할 수 있게 해주는 클래스이다. String은 원래 클래스로 따로 사용하지 않으며 나머지 자료형은 자료형의 첫 글자를 대문자로 선언해서 사용한다. char는 Character이라고 선언.

자료형.parse자료형("문자열") : 문자열을 기본 자료형으로 변경해주는 기능.

String test2="20";
int change=Integer.parseInt(test2);
System.out.println(change); //20
test2="180.5";
double height=Double.parseDouble(test2);
System.out.println(height); //180.5

//두 값 중에 큰 값을 반환
int result=Integer.max(10, 20);
System.out.println(result); //20

//두 값 중에 작은 값을 반환
result=Integer.min(2, 10);
System.out.println(result); //2

💡 char 자료형은 parse 기능을 사용하지 않는다. charAt()을 사용해서 변경 가능.

Date 클래스

Date는 자바에서 날짜 처리를 하기 위해 만들어진 클래스로 자바 프로그래밍에 자주 사용하는 java.util.Date와 DB 연동 날짜를 위해 사용하는 java.sql.Date로 나뉜다.

Date today=new Date(); 형태로 생성해서 사용할 수 있다. 내부적으로 숫자로 표기되며 1970.01.01. 9시를 기준으로 Long타입으로 계산돼서 출력된다. Date(0); 넣어서 확인해볼 수 있다.

Date today=new Date();
System.out.println(today);
today=new Date(0);
System.out.println(today); //Thu Jan 01 09:00:00 KST 1970

💡 today.getDate(); getDate() 메소드는 자바에서 더이상 제공하지 않고 업데이트 할 때 제외될 메소드로 사용하지 말라는 메시지가 뜬다.
⚠️The method getDate() from the type Date is deprecated

Calendar 클래스

Calendar 클래스는 추상 클래스이기 때문에 new 생성자 사용해서 직접 생성할 수 없다. Calendar c; 로 선언하고 c=Calendar.getInstance(); 처럼 싱글톤 패턴을 이용해서 사용할 수 있다. 원하는 데이터를 출력하기 위해서 각 데이터를 따로 가져와야한다. get(필드값)을 사용한다.

Calendar c; //new 생성자 사용해서 직접 생성할 수 없다.
c=Calendar.getInstance(); //싱글톤 패턴
System.out.println("년 : "+c.get(Calendar.YEAR));
//컴퓨터 시간을 변경하면 기준값이 바뀌기 때문에 출력값도 변경된다.
System.out.println("월 : "+(c.get(Calendar.MONTH)+1)); //MONTH만 0~11까지 출력
System.out.println("일 : "+c.get(Calendar.DATE));
System.out.println("시 : "+c.get(Calendar.HOUR));
System.out.println("분 : "+c.get(Calendar.MINUTE));
System.out.println("초 : "+c.get(Calendar.SECOND));

Calendar().set(항목, 설정값); 으로 원하는 날짜를 설정할 수 있다. 설정값은 int 자료형으로 작성한다.

Calendar birthDay=Calendar.getInstance(); //생성 후 값을 셋팅할 수 있다.
birthDay.set(Calendar.YEAR, 1998);
birthDay.set(Calendar.MONTH,7-1); //0부터 시작하기 때문에 셋팅하려는 달-1을 해준다.
birthDay.set(Calendar.DATE, 17);
year=birthDay.get(Calendar.YEAR);
month=birthDay.get(Calendar.MONTH)+1;
date=birthDay.get(Calendar.DATE);
System.out.println(year+"."+month+"."+date+"."); //1998.7.17. 출력

GregorianCalendar 클래스

GregorianCalendar gc=new GregorianCalendar();
System.out.println(gc);
gc.set(Calendar.YEAR, 1998);
System.out.println("Year : "+gc.get(Calendar.YEAR));

위처럼 선언해서 사용하고 set, get 메소드를 사용해서 날짜를 지정하거나 반환 받아서 사용할 수 있다. Calendar 클래스와 다르게 gc=new GregorianCalendar(1998, 6, 17); 처럼 생성과 동시에 날짜를 셋팅할 수 있다는 차이점이 있다.

💡Date 클래스와 Calendar, GregorianCalendar 호환

getTimeInMillis() 메소드를 사용하면 Calendar 객체에 저장된 데이터를 long형으로 변환해준다.

GregorianCalendar gc=new GregorianCalendar();
gc=new GregorianCalendar(1998, 6, 17);
Date dDay=new Date(gc.getTimeInMillis());
System.out.println(dDay); //Fri Jul 17 00:00:00 KST 1998

Calendar c;
c=Calendar.getInstance();
dDay=new Date(c.getTimeInMillis());
System.out.println(dDay); //Fri Mar 24 16:19:58 KST 2023

SimpleDateFormat 클래스

날짜 클래스를 원하는 패턴의 문자열로 변경해준다.

지정 기호
y : year, M : month, d : date
E : week, h : hour, m : minute, s : second, SSS : millisecond

SimpleDateFormat sdf=new SimpleDateFormat("yyyy.MM.dd.");
String dateStr=(sdf.format(new Date(c.getTimeInMillis())));
System.out.println(dateStr); //2023.03.24.
sdf=new SimpleDateFormat("yyyy년 MM월 dd일 E요일 hh시 mm분 ss초");
System.out.println(sdf.format(dDay)); //2023년 03월 24일 금요일 04시 27분 25초

LocalDate, LocalTime, LocalDateTime 클래스

자바 8버전 이후부터는 날짜 기능을 제공하는 클래스가 하나 추가 됐다. java.time 패키지에서 제공하는 클래스들로 LocalDateLocalDate ld=LocalDate.*now*(); 로 선언해서 현재 날짜를 불러와서 사용할 수 있다. 일반 클래스들과 다르게 now() 메소드를 사용해서 생성해준다.
LocalDate.of(셋팅 날짜);를 이용해서 날짜를 셋팅해서 사용할 수 있다.

LocalDate ld=LocalDate.*now*();
ld=LocalDate.of(1998, 7, 17); //월이 -1되지 않고 출력된다.
System.out.println(ld); //1998-07-17

LocalTime 클래스는 시간에 대한 기능을 제공한다. 생성 방법은 마찬가지로 now() 메소드를 이용하고, 시간 셋팅도 가능하다.

LocalTime lt=LocalTime.now();
System.out.println(lt); //현재 시간이 출력된다.
lt=LocalTime.*of*(12, 50, 00); //시간을 설정
System.out.println(lt); //설정된 시간이 출력.

LocalDateTime 클래스는 날짜와 시간을 모두 저장하는 클래스다. 별다른 셋팅값 없이 현재 날짜, 시간을 출력하면 밀리세컨드까지 출력된다.

LocalDateTime ldt=LocalDateTime.now();
System.out.println(ldt); //현재 날짜,시간이 출력된다.
ldt=LocalDateTime.of(2000, 11, 16, 11, 30); //원하는 날짜, 시간을 셋팅
System.out.println(ldt); //2000-11-16T11:30 출력

💡ChronoUnit.계산날짜단위.between(시작날짜, 종료날짜);

날짜 사이의 기간을 계산해주는 메소드이다.

//지금까지 살아온 개월수 구하기
LocalDateTime ldt=LocalDateTime.of(1998, 7, 17, 8, 30);
long result=ChronoUnit.MONTHS.between(ldt, LocalDateTime.now());
System.out.println("태어난 날부터 현재까지 개월 수 : "+result);
//시험날짜까지 남은 일수 구하기
LocalDate ld=LocalDate.of(2023,11,20);
result=ChronoUnit.DAYS.between(LocalDate.now(), ld);
System.out.println("23.11.20까지 남은 일수 : "+result);
profile
천천히 기록해보는 비비로그

0개의 댓글