API
//자바에서 문자열 관련 클래스는 3가지가 있음
//String, StringBuffer, StringBuilder
//String : 클래스지만 기본자료형처럼 사용할 수 있는것 -> = ""로 사용가능
//StringBuffer,StringBuilder : 클래스 사용방식으로 사용 -> new 연산자로 생성 후 사용
//String은 불변의 문자열 -> 수정이 불가능
//StringBuffer,StringBuilder는 가변의 문자열 -> 수정이 가능
String str="홍길동";
System.out.println(str);
System.out.println(str.hashCode());
str+="거짓말";
System.out.println(str);
System.out.println(str.hashCode());
StringBuffer sb=new StringBuffer("홍길동");
System.out.println(sb);
System.out.println(sb.hashCode());
sb.append("거짓말");
System.out.println(sb);
System.out.println(sb.hashCode());
//문자열 저장 후 수정, 삭제가 많이 발생한다면...
//StringBuffer,StringBuilder
//저장 후 변경이 없다면 String
String 관련 클래스
String 클래스
문자열 값 수정 불가능,immutable(불변)
수정 시 수정된 문자열이 새로 할당 되어 새 주소를 넘김
public static void main(String[] args) {
//자바에서 문자열 관련 클래스는 3가지가 있음
//String, StringBuffer, StringBuilder
//String : 클래스지만 기본자료형처럼 사용할 수 있는것 -> = ""로 사용가능
//StringBuffer,StringBuilder : 클래스 사용방식으로 사용 -> new 연산자로 생성 후 사용
//String은 불변의 문자열 -> 수정이 불가능
//StringBuffer,StringBuilder는 가변의 문자열 -> 수정이 가능
String str="홍길동";
System.out.println(str);
System.out.println(str.hashCode());
str+="거짓말";
System.out.println(str);
System.out.println(str.hashCode());
StringBuffer sb=new StringBuffer("홍길동");
System.out.println(sb);
System.out.println(sb.hashCode());
sb.append("거짓말");
System.out.println(sb);
System.out.println(sb.hashCode());
//문자열 저장 후 수정, 삭제가 많이 발생한다면...
//StringBuffer,StringBuilder
//저장 후 변경이 없다면 String
//String제공하는 유용한 메소드에 대해 알아보자.
//1. String.concat("문자열") : 문자열을 연결해주는 메소드
String test="대한민국";
test=test.concat("아자아자 화이팅");
System.out.println(test);
test=test.concat("호호호").concat("하하하");
System.out.println(test);
//+=연산과 동일한 기능을 한다.
//2. boolean String.contains("문자열")
// : 문자열에 매개변수로 전달된 문자열이 포함되어있는지 확인해주는기능
// boolean result=test.contains("화이");
// System.out.println(result);
if(test.contains("대한민국")) {
System.out.println("할수있다. 대한민국 화이팅!");
}
//3. int indexOf("문자열")
// : 문자열에 매개변수로 전달된 문자열이 있는지 확인하고
// 그 위치값(index)을 반환, 없으면 -1
System.out.println(test.indexOf("대한"));
System.out.println(test.indexOf("민"));
System.out.println(test.indexOf("국"));
if(test.indexOf("대한민국")!=-1) {
System.out.println("오늘은 너무 쉽다..");
}
//단독으로 사용하기보다는 인덱스를 사용하는 다른 메소드와 같이 사용
//lastIndexOf() : 뒤에서부터 찾기
test="data.test.exe";
System.out.println(test.indexOf("."));
System.out.println(test.lastIndexOf("."));
//indexof("문자",startindex);
System.out.println(test.indexOf(".",
test.indexOf(".")+1));
//4. String split("문자")
// : 문자열을 특정구분자로 구분하여 배열로 만들어주는 기능
// csv : 유병승,19,경기도 시흥시,남
test="홍길동,19,경기도 시흥시,남";
String[] data=test.split(",");
System.out.println(Arrays.toString(data));
System.out.println(data[0]);
System.out.println(data[1]);
System.out.println(data[2]);
test="홍길동,19,경기도 시흥시,남\n전우치,31,서울시,남\n이박사,27,부천,여";
String[] persons=test.split("\n");
Person[] personArr=new Person[persons.length];
for(int i=0;i<persons.length;i++) {
String[] person=persons[i].split(",");
for(int j=0;j<person.length;j++) {
System.out.print(person[j]);
Person p
=new Person(person[0],
Integer.parseInt(person[1]),
person[2],
person[3].charAt(0));
personArr[i]=p;
}
System.out.println();
}
for(Person p : personArr) {
System.out.println(p);
}
//5. String replace("찾을값","대체값")
// 특정문구를 지정문구로 변경하는 기능
test="나는 코딩을 정말 못해 못해 못해!";
test=test.replace("못해", "잘해");
System.out.println(test);
//6. static String String.join("구분자",배열)
// : 배열을 구분자로 구분한 문자열로 변경해주는 기능
String[] testArr= {"홍길동","전우치","임꺽정","장삼봉"};
test=String.join("->", testArr);
System.out.println(test);
//7. String substring(시작인덱스[,끝인덱스]);
// : 시작인덱스에서 끝인덱스까지 문자열을 잘라내는 기능
test="수업 끝";
test=test.substring(0,2);
System.out.println(test+" 시작!");
test="test.png";
//확장자만 가져오기
String exe=test.substring(test.lastIndexOf(".")+1);
System.out.println(exe);
//파일명만 가져오기
exe=test.substring(0,test.indexOf("."));
System.out.println(exe);
//8. toUpperCase()/toLowerCase()
// 영문자를 대문자, 소문자로 변경해주는 기능
test="AbCdEfG";
System.out.println(test);
System.out.println(test.toUpperCase());
System.out.println(test.toLowerCase());
Scanner sc=new Scanner(System.in);
// System.out.print("계속하시겠습니까?(y/n)");
// String cho=sc.next();
// if(cho.toLowerCase().equals("y")) {
// System.out.println("계속진행!");
// }else if(cho.toLowerCase().equals("n")) {
// System.out.println("중단!");
// }
//9. String trim()
// : 문자열의 양쪽 공백을 제거해주는 기능
test="오늘은 참 쉽다! ";
System.out.println(test);
System.out.println(test.equals("오늘은 참 쉽다!"));
System.out.println(test.trim());
test=test.trim();
System.out.println(test.equals("오늘은 참 쉽다!"));
//10. static String valueOf()
// : 다른타입의 값을 String으로 변환해주는 기능 -> 강제형변환
int num=10;
test=String.valueOf(num);
System.out.println(test);
double weight=65.5;
test=String.valueOf(weight);
System.out.println(test);
//11. getBytes()
// : String에 저장된 값을 byte배열로 반환해주는 메소드
byte[] bArr=test.getBytes();
bArr=test.getBytes(Charset.forName("UTF-8"));
//12. formmated() 15
// : 문자열 패턴을 값으로 변경해서 출력
// %d, %f, %s, %c
String test2="""
<h2>하이</h2>
<p>이건 html구문 작성한거야</p>
<input type="text" value="%s"/>
""".formatted(test);
System.out.println(test2);
// isBlank()/isEmpty() 11
test=" ";
System.out.println(test.isBlank());
System.out.println(test.isEmpty());
if(test.length()>0) {}
if(!test.isEmpty()) {}
StringBuffer 클래스
문자열 값 수정 가능, mutable(가변)
수정, 삭제 등이 기존 문자열에 수정되어 적용
기본 16문자 크기로 지정된 버퍼를 이용하여 크기 증가 가능
쓰레드 safe기능 제공(성능 저하 요인)
//StringBuffer사용하기
// 클래스에 선언되었는 메소드를 이용해서 문자열을 다룸
//데이터를 저장, 수정, 삭제 -> * 원본값을 수정
StringBuffer testSb=new StringBuffer();
System.out.println(testSb);
System.out.println(testSb.isEmpty());
//데이터 저장하기
//append()메소드 이용하기
//: 문자열의 마지막에 추가해주는 기능
testSb.append("여러분 이제 곧 점심시간");
System.out.println(testSb);
//insert(인덱스번호, 추가할 문구)메소드 이용하기
// : 원하는 위치에 문자열을 추가해주는 기능
testSb.insert(4, "이제 이제 ");
System.out.println(testSb);
testSb.insert(testSb.indexOf("곧"), "곧 곧 곧 곧 ");
System.out.println(testSb);
//문자열을 삭제하기
//delete(시작인덱스, 끝인덱스)
// : 지정된범위의 문자열을 삭제해주는 기능
testSb.delete(4, 10);
System.out.println(testSb);
testSb.delete(testSb.indexOf("곧"),
testSb.lastIndexOf("곧"));
System.out.println(testSb);
//deleteCharAt(인덱스번호)
// : 지정문자(인덱스번호) 한개를 삭제하는 기능
testSb.deleteCharAt(testSb.indexOf("곧"));
System.out.println(testSb);
//수정하기
// setCharAt(인덱스번호,'수정한문자')
// : 한글자만 수정가능
testSb.setCharAt(testSb.lastIndexOf(" "), '곧');
System.out.println(testSb);
//length()
// 저장된 문자열의 길이 확인하는 기능
System.out.println(testSb.length());
//문자열을 다루는 기능제공함.
//indexOf, lastIndexOf, substring, replace
//replace(시작인덱스번호, 끝인덱스번호, 변경한 문구)
testSb.replace(7, 8, "곧 ");
System.out.println(testSb);
testSb.replace(testSb.indexOf("점"),
testSb.indexOf("심")+1, "저녁");
System.out.println(testSb);
//reverse() 반대로...
testSb.reverse();
System.out.println(testSb);
testSb.reverse();
System.out.println(testSb);
//String과 StringBuffer간 호환성
// test=new String(testSb);
System.out.println(test);
test+="점심 뭐 먹지?";
testSb=new StringBuffer(test);
System.out.println(testSb);
//StringBuilder==StringBuffer랑 똑같음!
//StringBuffer는 쓰레드세이프티 기능이 있음.
stringTokenizerTest();
StringBuilder 클래스
StringBuffer와 동일하나 쓰레드 safe기능을 제공하지 않음
StringTokenizer 클래스
String클래스에서 제공하는 split()메소드와 같은 기능을 하는 클래스로 생성 시 전달받은 문자열을 구분자로 나누어 각 토큰에 저장
public static void stringTokenizerTest() {
//StringTokenizer클래스를 이용하기
//String 특정구분자로 구분해서 각 데이터를 별도로 출력해주는 기능을 하는 클래스
String test="전우치,홍길동,장삼봉,피카츄,꼬북이";
test="java,oracle,html/css,javascript/jquery,servlet";
StringTokenizer st=new StringTokenizer(test,",/");
String val=st.nextToken();
// System.out.println(val);
// val=st.nextToken();
// System.out.println(val);
// val=st.nextToken();
// System.out.println(val);
// val=st.nextToken();
// System.out.println(val);
// val=st.nextToken();
// System.out.println(val);
//hasMoreElement() -> 저장소에 출력할 내용이 있는지 확인
while(st.hasMoreTokens()) {
String n=st.nextToken();
System.out.println(st.nextToken()+" 힘내!!");
}
Wrapper 클래스
| Primitive Data Type | Wrapper Class |
| boolean | Boolean |
| byte | Byte |
| char | Character |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
Wrapper 클래스
public static void main(String[] args) {
//Wrapper클래스 이용하기
//기본자료형을 객체로 취급하게 해주는 클래스들....
//기본 데이터 타입을 객체로 다루어야 하는 상황에서 사용되며
//숫자로 변환하거나 반대로 숫자를 문자열로 변환할 때도 유용하게 활용됩니다.
//기본자료형, Wrapper클래스는 자동으로 형변환 처리해준다
//auto Boxing(기본자료형->Wrapper),
//auto UnBoxing(Wrapper->기본자료형)
//int -> Integer
//double -> Double
//char -> Character
//boolean -> Boolean
//long -> Long
Object o =10;
Integer i=100;
int j=i;
printValue(180.5);
printValue('호');
printValue("하하하");
printValue(true);
날짜 관련 클래스
Date 클래스
시스템으로부터 현재 날짜, 시간 정보를 가져와서 다룰 수 있게 만들어진 클래스
생성자 2개만 사용 가능하고 나머지는 모두 deprecated
Calendar 클래스 혹은 GregorianCalendar 클래스 사용 권장
public static void main(String[] args) {
//java에서 날짜 처리하기
//java.util.Date(java),java.sql.Date(DB연동)
//java.util.Calendar
//java.util.GregorianCalendar
//java.util.time
//LocalDate, LocalTime, LocalDateTime
//오늘 날짜 가져오기 -> 컴퓨터에 등록된 일짜
Date today=new Date();
System.out.println(today);
//long데이터를 매개변수로 넣어서 날짜 출력
//지정된 날짜를 출력
today=new Date(12345678900000L);
System.out.println(today);
//Date클래스의 메소드 이용하기 -> deprecated되어 있음!
//java.utill.Date는 타입으로 사용
//Calendar, GregorianCalendar사용하기\
Calendar c;//=new Calendar();
//Calendar 클래스는 추상클래스로 직접생성이 불가능함.
//Calendar 클래스를 이용하려면 Calendar 객체를 제공하는 메소드를 호출
c=Calendar.getInstance();
System.out.println(c);
//Calendar에 저장된 년,월,일,시,분,초 출력하기
//Calendar.get(Calender.YEAR||MONTH||DATE)
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH);
int day=c.get(Calendar.DATE);
System.out.println(year+"년"+(month+1)+"월"+day+"일");
int hour=c.get(Calendar.HOUR);
hour=c.get(Calendar.HOUR_OF_DAY);
int minute=c.get(Calendar.MINUTE);
int second=c.get(Calendar.SECOND);
System.out.println(hour+":"+minute+":"+second);
//날자설정하기
//set(필드,값)
Calendar birthDay=Calendar.getInstance();
birthDay.set(Calendar.YEAR, 1999);
birthDay.set(Calendar.MONTH, 13);
birthDay.set(Calendar.DATE, 2);
birthDay.set(Calendar.HOUR_OF_DAY, 11);
birthDay.set(Calendar.MINUTE, 31);
birthDay.set(Calendar.SECOND, 48);
year=birthDay.get(Calendar.YEAR);
month=birthDay.get(Calendar.MONTH)+1;
day=birthDay.get(Calendar.DATE);
System.out.println(year+"."+month+"."+day);
Calendar클래스
Calendar클래스는 생성자가 protected이기 때문에 new연산자를 통해 객체 생성 불가능
getInstance()메소드를 통해서 객체 생성
GregorianCalendar클래스
GregorianCalendar클래스는 Calendar클래스의 후손 클래스
년,월,일,시,분,초,정보를 필드를 이용하여 다룰 수 있음
//GregorianCalendar이용하기
GregorianCalendar gc=new GregorianCalendar();
System.out.println(gc);
//get메소드를 이용 출력
year=gc.get(Calendar.YEAR);
month=gc.get(Calendar.MONTH)+1;
System.out.println(year+"."+month);
//날짜 지정해서 생성하기
// gc=new GregorianCalendar(2000,4,17);
// System.out.println(new Date(gc.getTimeInMills()));
//날자를 원하는 방식대로 출력하기
//SimpleDateFormat클래스
//y:년
//M:월
// d:일
// E:요일
// h:시간
// m:분
// s:초
//Date -> 원하는 패턴의 문자열로 반환
SimpleDateFormat sdf=
new SimpleDateFormat("yyyy년 MM월 dd일 E요일 hh:mm:ss");
String date=sdf.format(new Date(gc.getTimeInMillis()));
//String date=sdf.format(new Date());
System.out.println(date);
//날짜패턴을 갖는 문자열을 Date로 변경하기
//Web에서 날짜를 전송하게 문자열로 전송이 됨
String webDate="1996-04-25";
String[]dateData=webDate.split("-");
gc=new GregorianCalendar(
Integer.parseInt(dateData[0]),
Integer.parseInt(dateData[1])-1,
Integer.parseInt(dateData[2])
);
today=new Date(gc.getTimeInMillis());
System.out.println(today);
//SimpleDateFormat이 제공하는 메소드이용하기
//parse()
SimpleDateFormat sdf2
=new SimpleDateFormat("yyyy-MM-dd");
Date sam=null;
try {
sam=sdf2.parse(webDate);
}catch(ParseException e) {
e.printStackTrace();
}
System.out.println(sam);
//날짜를 더하기
//add(필드,값);
System.out.println(new Date(gc.getTimeInMillis()));
gc.add(Calendar.YEAR,10);
System.out.println(new Date(gc.getTimeInMillis()));
gc.add(Calendar.YEAR,-20);
//날짜차이?
long send=(today.getTime()-gc.getTimeInMillis())/1000;
long min=(today.getTime()-gc.getTimeInMillis())/6000;
long hours=(today.getTime()-gc.getTimeInMillis())/36000;
long dates=((today.getTime()-gc.getTimeInMillis())
/1000)/(24*60*60);
System.out.println(send);
System.out.println(min);
System.out.println(hours);
System.out.println(dates);
//java8
//LocalDate, LocalTime, LocalDateTime
//생성할때 static메소드인 now()를 이용함
LocalDate ld=LocalDate.now();//현재일
System.out.println(ld);
ld=LocalDate.of(1995, 11, 14);
year=ld.getYear();
month=ld.getMonthValue();
day=ld.getDayOfMonth();
System.out.println(year);
System.out.println(month);
System.out.println(day);
//LocalTime : 시간설정
LocalTime lt=LocalTime.now();
System.out.println(lt);
lt=LocalTime.of(16, 50);
System.out.println(lt);
System.out.println(lt.getHour()+"시");
System.out.println(lt.getMinute()+"분");
System.out.println(lt.getSecond()+"초");
//LocalDateTime : 날짜와 시간을 한번에 저장
LocalDateTime ldt=LocalDateTime.now();
System.out.println(ldt);
ldt=LocalDateTime.of(ld, lt);
ldt=LocalDateTime.of(2002, 8,1,18,30,21);
System.out.println(ldt);
System.out.println(ldt.getYear());
System.out.println(ldt.getMonthValue());
System.out.println(ldt.getHour());
System.out.println(ldt.getMinute());
System.out.println(ldt.getSecond());
Format 관련 클래스
SimpleDateFormat클래스
Date의 날짜, 시간 정보를 원하는 format으로 출력하는 기능 제공
java.text패키지에 속해있음
Format 변환문자
값 출력시 format적용하여 출력
Formatter 객체 생성 시 변환된 결과를 보낼 곳의 정보를 생성자 인자로 전달
| 변환문자 | 의미 |
| %d | 정수 (십진수) |
| %c | 유니코드 |
| %b | boolean값 |
| %s | String |
| %f | 부동소수점 (십진수 |
| %e | 부동소수점 (과학적 표기 |
| %x | 정수 (16진수 |
| %h | 해시코드 (16진수 |
| %% | 리터럴 % |
excape문자
| 특수문자 | 문자 리터럴 | 비고 |
| tab | \t | 정해진 공간만큼 띄어쓰기 |
| new line | \n | 출력하고 다음 라인으로 옮김 |
| 역 슬래시 | \\ | 특수문자 사용시 백슬래시( \ )를 넣고 특수문자를 넣어야함 |
| 작은 따옴표 | \' | |
| 큰 따옴표 | \" | |
| 유니코드 | \u | 유니코드 표시할 때 사 |
'Java' 카테고리의 다른 글
| Java 12 입출력IO (0) | 2023.09.18 |
|---|---|
| Java 11 Exception처리 (0) | 2023.09.15 |
| Java 9 인터페이스 (0) | 2023.09.13 |
| Java 8 다형성 (0) | 2023.09.12 |
| Java 7 상속 (0) | 2023.09.11 |