문자열 표현 방법: 큰따옴표로 문자열을 묶는다.
문자열 리터럴은 Java 에 의해서 최적화 되기 때문에 동일한 리터럴이 2번 이상 나타나면 기존 리터럴을 재사용한다.
[문자열 리터럴 비교]
name1과 name2의 참조값이 동일하다.
String name1 = "tom";
String name2 = "tom";
boolean isEqual = name1 == name2;
System.out.println(isEqual);
출력:true
문자열 객체는 항상 새로 생성된다.
[문자열 객체 비교]
name1과 name2의 참조값이 다르다.
String name1 = new String("tom");
String name2 = new String("tom");
boolean isEqual = name1 == name2;
System.out.println(isEqual);
출력:false
문자열이 동일하면 true, 아니면 false 반환
String name1 = new String("tom");
String name2 = new String("tom");
String name3 = new String("Tom");
boolean isEqual1 = name1.equals(name2);
System.out.println(isEqual1);
boolean isEqual2 = name1.equals(name3); // 대소문자도 일치해야 동일한 문자열로 인식한다.
System.out.println(isEqual2);
boolean isEqual3 = name1.equalsIgnoreCase(name3); // 대소문자를 무시하고 문자열을 비교한다.
System.out.println(isEqual3);
출력: toUpperCase메소드:모두 대문자로 변환
toLowerCase메소드:모두 소문자로 변환
String name="Tom";
System.out.println(name.toUpperCase());
System.out.println(name.toLowerCase());
출력:문자열의 길이(글자수)를 반환
String name="Tom cruise\n";
int length=name.length();
System.out.println(length);//11
출력:11
문자열의 특정 인덱스(Index)의 문자를 반환
String name="tom";
char ch1=name.charAt(0);
char ch2=name.charAt(1);
char ch3=name.charAt(2);
System.out.println(ch1+","+ch2+","+ch3);//t,o,m
출력:t,o,m
문자열의 일부 문자열을 반환
[substring 사용법]
1. substring(int begin) :인덱스 begin부터 끝까지 반환
2.substring(int begin,int end) :인덱스 begin부터 end 이전까지 반환(begin<=추출범위<end)
String name="Tom cruise\n";
String firstName=name.substring(0,3);
System.out.println(firstName);
String lastName=name.substring(0);
System.out.println(lastName);
출력:
Tom
Tom cruise
1.특정 문자열의 인덱스를 반환
2.특정 문자열이 2개 이상 존재하는경우 발견된 첫 번째 문자열의 인덱스를 반환
3.발견되지 않으면 -1을 반환
indexOf 사용법
1.indexOf(String str) :인덱스 0부터 String str을 검색
2.indexOf(String str,int index) :인덱스 index부터 String str을 검색
String statement = "걱정한다고 걱정이 없어지면 걱정이 없겠네";
int idx1 = statement.indexOf("걱정"); // 0
int idx2 = statement.indexOf("걱정", idx1 + 1); // 6
int idx3 = statement.indexOf("걱정", idx2 + 1); // 15
int idx4 = statement.indexOf("tom"); // -1
System.out.println(idx1);
System.out.println(idx2);
System.out.println(idx3);
System.out.println(idx4);
출력:
0
6
15
-1
1.발견된 마지막 문자열의 인덱스를 반환
2. 나머지 특징은 indexOf와 동일함
String statement="걱정한다고 걱정이 없어지면 걱정이 없겠네";
int idx=statement.lastIndexOf("걱정");
System.out.println(idx);//15
출력:15
지정된 CharSequence(String, char[]등) 가 포함되어 있으면 true 반환, 아니면 false 반환
String email="admin@naver.com";
if(email.contains("@")) {
System.out.println("@가 포함되어있다.");
}
else {
System.out.println("@가 포함되어있지 않다");
}
출력:@가 포함되어있다.
1.빈 문자열이면 true 반환, 아니면 false 반환
2.빈 문자열: "" 처럼 문자열의 길이가 0인 문자열
String name=" ";
if(name.isEmpty()) {
System.out.println("이름이 없다.");
}
else {
System.out.println("이름이 있다.");
}
출력:
이름이 있다.
1.빈 문자열이거나, 공백문자로 구성되었다면 true 반환 아니면 false 반환
2.JDK11 이후 버전에서 사용 가능
if(name.isBlank()) {
System.out.println("이름이 없다");
}
else {
System.out.println("이름이 있다");
}
출력:
이름이 없다.
숫자 형식
int number =100;//10진수 100
System.out.println(String.format("%o", number));//%o : 8진수로 표시
System.out.println(String.format("%d", number)); //%d: 10진수로 표시
System.out.println(String.format("%x", number));//%x:16진수로 표시(0~9,a~f)
System.out.println(String.format("%x", number));//%X:16진수로 표시(0~9,A~F)
출력:문자열 형식
String str="hello";
System.out.println(String.format("%s", str));//%s : 문자열로 표시
출력:
hello
출력 폭 조정
System.out.println(String.format("%5d",number));//5자리 10진수로 표시 ,숫자를 오른쪽 정렬처리
System.out.println(String.format("%-5d",number));//5자리 10진수로 표시 ,숫자를 왼쪽 정렬처리
System.out.println(String.format("%05d",number));//5자리 10진수로 표시 ,숫자를 오른쪽 정렬처리,빈자리를 0으로 채움
System.out.println(String.format("%10s", str));//10자리 문자열표시, 문자열을 오른쪽 정렬처리
System.out.println(String.format("%-10s", str));//10자리 문자열표시, 문자열을 왼쪽 정렬처리
출력:
100
100
00100
hello
hello
String ip="192.168.0.101";
String str= ip.replaceAll(".","_");
System.out.println(str);//192.168.0.101을 기대하지만 정규식에서 .는 모든 문자를 의미하므로 원하는 결과를 얻을 수 없다.
출력:
_____
앞 뒤에 포함된 공백 문자 제거
String name="\n tom\n";
String str1=name.strip();
System.out.println(str1.length());//3
출력:
3
앞 뒤에 포함된 공백 문자 제거
String str2 =name.trim();
System.out.println(str2.length());//3
출력:
3
1.지정된 문자열을 다른 문자열로 변환하는 역할을 수행
2. 발견된 모든 문자열을 변환
String ip="192.168.0.101";
String str=ip.replace(".", "_");
System.out.println(str);
출력:
192_168_0_101
1.JDK1.0부터 사용 가능하다
2.String을 연결하는 클래스이다.(문자열 연결 연산자+를 대체하는 클래스)
3.synchronized(동기화) 처리되어 멀티스레드 환경에서 사용할 수 있다.
4. 동작이 느리다.
5.String 클래스에 비해서 메모리 낭비가 적다.
StringBuffer사용법
//StringBuffer 객체를 선언
StringBuffer sb;
//StringBuffer 객체 생성
sb=new StringBuffer();
//append 메소드를 이용한 문자열 연결
sb.append("ha");
sb.append("va");
sb.append("na");
//StringBuffer 객체에 저장된 문자열을 String으로 변환
String str=sb.toString();
System.out.println(str);
}
출력:
havana
java.lang.StringBuilder 클래스
1.JDK1.5부터 사용 가능하다
2.String을 연결하는 클래스이다.(문자열 연결 연산자+를 대체하는 클래스)
3.synchronized(동기화) 처리가 되지 않아 싱글스레드 환경에서 사용할 수 있다.
4. 동작이 빠르다
5.String 클래스에 비해서 메모리 낭비가 적다.
StringBuilder사용방법
//StringBuilder 객체 선언
StringBuilder sb;
//StringBuilder 객체 생성
sb=new StringBuilder();
//append 메소드를 이용한 문자열 연결
sb.append("ha");
sb.append("va");
sb.append("na");
//StringBuilder 객체에 저장된 문자열을 String으로 변환
String str=sb.toString();
System.out.println(str);
출력:
havana
java.lang.Math 클래스의 random메소드
1.0이상 1 미만의 난수를 반환
2.클래스 메소드이므로 Math 클래스를 이용해서 호출함
random() 사용법
double randomNumber =Math.random();//0.0<=난수 <1.0
//확률 처리하기
if(randomNumber<0.1)
{
System.out.println("대박");
}
else {
System.out.println("꽝");
}
}
출력:
꽝
또는 일정 확률로
출력:
대박
정수 난수로 바꿔서 사용하기
1단계 :Math().random() 0.0<=n<1.0
2단계 :Math().random() 0.0<=n<3.0
3단계 :(int)(Math.random()3) 0 < = n < 3
4단계 :(int)(Math.random()3)+1 1 < = n < 4
-------------------------------------------------------
(int)(Math.random()개수) + 시작값
(int)(Math.random()개수+ 시작값)
int randomNumber=(int)(Math.random()*3)+1; //1부터 3개의 난수 발생
System.out.println(randomNumber);
출력:
3
보안 처리된 난수를 발생한다.
Random 클래스와 같은 사용법을 가진다.
//SecureRandom 객체 선언 & 생성
SecureRandom securerandom=new SecureRandom();
//실수
double randomNumber1=securerandom.nextDouble();
//정수
int randomNumber2=securerandom.nextInt();
int randomNumber3=securerandom.nextInt(5);
System.out.println(randomNumber1);
System.out.println(randomNumber2);
System.out.println(randomNumber3);
UUID uuid=UUID.randomUUID();
String str= uuid.toString();
System.out.println(str);
1.현재 시간을 long 타입의 값으로 가지고 있는데 그걸 타임스탬프 라고 한다.
2.1970년 1월1일 0시부터 1/1000초마다 1씩 증가하고 있는 값이다.
Timestamp사용법
long timestamp=System.currentTimeMillis();
System.out.println(timestamp);
출력:
1690779089036
시간 단위
second > ㎳ > ㎲ > ㎱ > ㎰
밀리초 마이크로초 나노초 피코초
1/1,000 1/1,000,000 1/1,000,000,000 1/1,000,000,000,000
currentTimeMillis() nanoTime()
나노초
어떤 작업 수행시간을 정밀하게 계산할 때 사용하는 시간
StringBuilder과 + 의 속도 비교
String s1="";
StringBuilder s2=new StringBuilder();
long start=System.nanoTime();
for(char ch='A';ch<='Z';ch++)
{
// s1+=ch;
s2.append(ch);
}
long end=System.nanoTime();
System.out.println("수행시간:"+(end-start)+"ns")
+ 이용
출력:
수행시간:37500ns
StringBuilder 이용
출력:
수행시간:9800ns
현재 날짜와 시간
Date date1=new Date();
System.out.println(date1);
<span style="color:skyblue">출력:
출력:
Mon Jul 31 16:47:15 KST 2023
타임스탬프 값에 해당하는 날짜와 시간
Date date2 =new Date(24*60*60*1000);
System.out.println(date2);
출력:
Fri Jan 02 09:00:00 KST 1970
DB의 DATE 타입을 처리하는 Date 클래스
**사용방법**
Date date = new Date(System.currentTimeMillis()); // 현재 날짜
System.out.println(date);
// java.sql.Timestamp 클래스
// DB의 TIMESTAMP 타입을 처리하는 Timestamp 클래스
Timestamp timestamp = new Timestamp(System.currentTimeMillis()); // 현재 날짜
System.out.println(timestamp);
출력:
2023-07-31날짜, 시간 형식을 지정할 수 있는 클래스이다.
원하는 형식을 패턴(pattern)으로 전달 할 수 있다.
패턴
1)yy : 년도 2자리
2)yyyy: 년도 4자리
3)M : 월 1자리(1~12)
4)MM : 월 2자리(01~12)
5)MMM : 문자열(1월~12월)
6) d : 일 1자리(1~31)
7)dd : 일 2자리(01~31)
8)E : 요일 (일~토)
9)a : 오전/오후(오전, 오후)
10)h : 12시각 1자리(1~12)
11)hh : 12시각 2자리(01~12)
12)H : 24시각 1자리(0~23)
13)HH :24시각 1자리(0~23)
14)m : 분 1자리(0~59)
15)mm :분 2자리(00~59)
16)s : 초 2자리(00~59)
17)ss : 초 2자리(00~59)
사용방법
Date date =new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd a hh:mm:ss");
String strDate=sdf.format(date);
System.out.println(strDate);
System.out.println(new SimpleDateFormat("yy/MM/dd E HH:mm:ss").format(date));
출력:
2023-07-31 오후 10:29:08 1.특정 날짜를 생성할 수 있다.
2. 날짜의 구성 요소(년,월, 일,...) 을 쉽게 가져다 사용할 수 있다.
사용방법
//현재날짜와 시간
Calendar calendar=Calendar.getInstance();
//구성요소 가져오기
int year1 = calendar.get(1);//Calendar.YEAR == 1
int year2 = calendar.get(Calendar.YEAR); //Calendar.YEAR == 1 이므로 int year =
int month = calendar.get(Calendar.MONTH);//월(0~11) : 주의가 필요하다.
int day=calendar.get(Calendar.DAY_OF_WEEK); //일(1~31)
int weekNo =calendar.get(Calendar.DAY_OF_WEEK);//일(1),월(2),...토(7)
int ampm=calendar.get(Calendar.HOUR);
int hour12=calendar.get(Calendar.HOUR);
int hour24=calendar.get(Calendar.HOUR_OF_DAY);
int minute= calendar.get(Calendar.MINUTE);
int second= calendar.get(Calendar.SECOND);
System.out.println(year1);
System.out.println(year2);
System.out.println(month);
System.out.println(day);
System.out.println(weekNo);
System.out.println(ampm);
System.out.println(hour12);
System.out.println(hour24);
System.out.println(minute);
System.out.println(second);
출력:특정날짜로 변경
//현재 날짜와 시간
Calendar calendar =Calendar.getInstance();
//특정 날짜로 변경
calendar.set(Calendar.YEAR,2022); //년도만 2022로 수정
//특정 기간 이후/이전으로 변경
calendar.add(Calendar.MONTH, 1); // 1개월 후
calendar.add(Calendar.DAY_OF_MONTH, -1);//1일 전
//Calendar를 이용해서 타임스탬프 알아내기
long timestamp =calendar.getTimeInMillis();
//Calendar를 이용해서 Date 알아내기
Date date=calendar.getTime();
System.out.println(date);
출력: Tue Aug 30 22:38:41 KST 2022
JDK 1.8 이후
1.날짜 : java.time.LocalDate
2.시간 : java.time.LocalTime
3.둘다:java.time.LocalDateTime
현재 날짜
LocalDate date1=LocalDate.now();
System.out.println(date1);
출력:2023-07-31
특정 날짜
LocalDate date2=LocalDate.of(2023,7,31);//2023년 7월 31일
System.out.println(date2);
출력:2023-07-31
문자열 날짜 처리
LocalDate date3 = LocalDate.parse("2023-07-31");//기본패턴:yyyy-MM-dd
System.out.println(date3);
출력:2023-07-31
현재시간
LocalTime time1 =LocalTime.now();
System.out.println(time1);
출력:22:46:52.153174200
특정시간
LocalTime time2=LocalTime.of(15,25,30);//15시 25분 30초
System.out.println(time2);
출력:15:25:30
문자열 시간 처리
LocalTime time3 = LocalTime.parse("14:25:30");//기본 패턴 HH:mm:ss
System.out.println(time3);
출력:14:25:30
현재 날짜와 시간
LocalDateTime dateTime1=LocalDateTime.now();
System.out.println(dateTime1);
출력:2023-07-31T22:52:26.606992900
특정 날짜와 시간
LocalDateTime dateTime2=LocalDateTime.of(2023, 7,31,15,25,30);
System.out.println(dateTime2);
출력:2023-07-31T15:25:30
LocalDateTime dateTime3=LocalDateTime.parse("2023-07-31T15:28:30");
System.out.println(dateTime3);
출력:2023-07-31T15:25:30
패턴 지정하기
LocalDateTime dateTime=LocalDateTime.now();
DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 E요일 a hh시 mm분 ss초");
String strDateTime =dtf.format(dateTime);
System.out.println(strDateTime);
출력:2023년 07월 31일 월요일 오후 10시 55분 51초
날짜/ 시간 구성요소 가져오기
LocalDateTime dateTime=LocalDateTime.now();
int year=dateTime.getYear();//년
int month=dateTime.getMonthValue();//월
int day=dateTime.getDayOfMonth();//일
int hour=dateTime.getHour();//시
int minute=dateTime.getMinute();//분
int second=dateTime.getSecond();//초
System.out.println(year);
System.out.println(month);
System.out.println(day);
System.out.println(hour);
System.out.println(minute);
System.out.println(second);
출력:2023java.util.Scanner 클래스
1. 어떤 정보를 읽어 들일 때 사용한다.
2. 파일, 사용자 입력 정보 등을 읽어 들일 수 있다. (사용자 입력에 초점을 맞춘다.)
3. 사용자가 입력하는 데이터의 타입에 따라서 입력 메소드가 구분되어 있다.
1)int :nextInt();
2)long :nextLong();
3)double :nextDouble();
4)String
(1)공백 없는 문자열:next();
(2)공백 있는 문자열:nextLine();
4.사용자 입력을 위해서 사용해야 하는 입력 스트림(InputStream)은 System.in이다.
// Scanner 객체 선언 & 생성
Scanner sc= new Scanner(System.in);
//String 입력
System.out.println("이름을 입력하세요");
String name=sc.next();//이름에 공백이 없어야 한다.
System.out.println("입력된 이름:"+name);
System.out.println("나이를 입력하세요");
int age=sc.nextInt();
System.out.println("입력된 나이:"+age);
System.out.println("키를 입력하세요");
double height=sc.nextDouble();
System.out.println("입력된 키:"+height);
sc.close();
출력:
이름을 입력하세요
(사용자입력)이이이
입력된 이름:이이이
나이를 입력하세요
(사용자입력)12
입력된 나이:12
키를 입력하세요
(사용자입력)333
입력된 키:333.0
관련예제
https://hyeonju50.tistory.com/7
깃허브
https://github.com/000000hj/javastudy/tree/main/13_Java_Api