하나의 자료형으로 사용 가능한 클래스로 문자열 값이 수정되지 않는 불변 문자열이다. 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.concat("문자열");
: 두 개의 문자열을 합쳐주는 메소드 앞,() 두개가 합쳐진다.
String test="GDJ64";
test=test.concat(" LEEJI");
System.out.println(test); //GDJ64 LEEJI 출력
String.contains("문자열");
: 문자열에 매개변수로 전달된 문자열이 포함되어있는지 확인해주는 기능
if(test.contains("64")) //문자열에 64가 있는지 없는지 확인하고 boolean형 반환
String.indexOf("문자열");
: 문자열에 매개변수로 전달된 문자가 있는지 확인하고 인덱스 번호를 반환해준다.
lastIndexOf("문자열");
: 뒤에서부터 실행한다.
System.out.println(test.indexOf("E")); //7
System.out.println(test.lastIndexOf("E")); //8
💡 System.***out***.println(test.indexOf("이"));
를 실행하면 -1이 출력 된다. 없는 값은 -1로 나오기 때문에 없는 값을 찾아낼 때 사용할 수 있다. 파일명을 찾아낼 때 . 을 기준으로 찾아내는 용도로 자주 사용한다.
String[] split(String)
: 특정 구분자(기호)로 구분할 수 있는 문자열을 구분해서 배열로 만든다.
test="LEE,26,서울시,여";
String[] result=test.split(",");
for(String d:result) {
System.out.print(d+" "); //LEE 26 서울시 여 출력
}
String.replace("찾을값","대체할값")
: 특정문구를 대체문구로 바꿔준다.
test="LEE JI";
String testStr=test.replace("LEE","KIM");
System.out.println(test); //LEE JI
System.out.println(testStr); //KIM JI
String.join("구분자",배열)
: 배열을 특정 구분자를 이용해서 문자열로 만들어준다.
String[] testArr= {"YOO","KIM","LEE","PARK","CHOI"};
test=String.join("-",testArr);
System.out.println(test); //YOO-KIM-LEE-PARK-CHOI
subString(시작인덱스번호, 끝인덱스번호)
: 시작인덱스부터 끝인덱스까지 문자열을 잘라내는 기능
test="test.png";
testStr=test.substring(test.indexOf(".")+1); //png
💡 시작 인덱스를 포함해서 잘라내고 끝 인덱스는 포함하지 않기 때문에 파일명을 구할 때 indetOf와 함께 사용하는 경우가 많다.
toUpperCase(), toLowerCase()
: 문자열을 대문자, 소문자로 바꿔주는 기능
test="AbcdE";
testStr=test.toUpperCase();
System.out.println(testStr); //ABCDE
testStr=test.toLowerCase();
System.out.println(testStr); //abcde
trim()
: 문자열의 양쪽 공백을 제거해주는 메소드
test=" Hello, java";
System.out.println(test); // Hello, java
testStr=test.trim();
System.out.println(testStr); //Hello, java
valueOf()
: 기본자료형을 String으로 변환해주는 기능
int age=26;
test=String.valueOf(age);
System.out.println(test); //26
✅ 콘솔 화면에서 보면 변환하기 전이랑 똑같이 26이 출력되는 것으로 보이겠지만 자료형이 int형에서 String형으로 변경됐다.
클래스 사용 방식으로 문자열을 다룰 수 있으며 가변 문자열이다. 문자열을 수정, 저장하면 값의 주소는 변경되지 않고 저장된 데이터 자체가 수정이 된다.
StringBuffer sb=new StringBuffer("LEEJI");
System.out.println(sb); //LEEJI 출력
System.out.println("수정 전 : "+sb.hashCode()); //수정 전 : 1554547125
System.out.println("수정 후 : "+sb.hashCode()); //수정 후 : 1554547125
append("문자열")
: 문자열을 추가하는 메소드
StringBuffer testSb=new StringBuffer();
System.out.println(testSb); //아무것도 출력되지 않음.
System.out.println(testSb.length());
testSb.append("StringBuffer Test!");
System.out.println(testSb); //StringBuffer Test!
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?!
delete(시작인덱스, 끝인덱스)
: 해당 위치에 있는 값을 삭제
deleteCharAt(인덱스번호)
: 한글자만 삭제
```java
testSb.delete(0, 5);
System.out.println(testSb);//StringBuffer Test?! ->끝자리는 포함하지 않음
```
setCharAt(인덱스번호,'수정할문자')
: 해당 인덱스 번호의 문자를 수정
testSb.setCharAt(13, 'B');
System.out.println(testSb); //StringBuffer Best?!
length()
: 문자열의 길이 출력
System.out.println(testSb.length());
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); ->두 번 가져온 것과 같다.
}
기본 자료형을 객체로 사용할 수 있게 해주는 클래스이다. 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는 자바에서 날짜 처리를 하기 위해 만들어진 클래스로 자바 프로그래밍에 자주 사용하는 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 클래스는 추상 클래스이기 때문에 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 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);
처럼 생성과 동시에 날짜를 셋팅할 수 있다는 차이점이 있다.
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
날짜 클래스를 원하는 패턴의 문자열로 변경해준다.
지정 기호
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초
자바 8버전 이후부터는 날짜 기능을 제공하는 클래스가 하나 추가 됐다. java.time 패키지에서 제공하는 클래스들로 LocalDate는 LocalDate 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 출력
날짜 사이의 기간을 계산해주는 메소드이다.
//지금까지 살아온 개월수 구하기
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);