public static void ex01() {
// 문자열 리터럴(Literal)
// 문자열 표현 방법 : 큰 따옴표로 문자열을 묶는다.
String name1 = "tom";
String name2 = "tom";
// 문자열 리터럴은 Java에 의해서 최적화되기 때문에
// 동일한 리터럴이 2번 이상 나타나면 기존 리터럴을 재사용한다.
//
// ┌--------------┐
// name1│ 0x12345678 │
// │--------------│
// name2│ 0x12345678 │
// │--------------│
// │ ... │
// │--------------│
// │ tom │0x12345678
// │--------------│
// │ ... │
// └--------------┘
// 문자열 리터럴 비교
// name1과 name2의 참조값이 동일하다.
boolean isEqual = name1 == name2;
System.out.println(isEqual); //true
}
public static void ex02() {
// 문자열 객체(Object)
String name1 = new String("tom");
String name2 = new String("tom");
// 문자열 객체는 항상 새로 생성된다.
//
// ┌--------------┐
// name1│ 0x12345678 │
// │--------------│
// name2│ 0x98765432 │
// │--------------│
// │ ... │
// │--------------│
// │ tom │0x12345678
// │--------------│
// │ ... │
// │--------------│
// │ tom │0x98765432
// │--------------│
// │ ... │
// └--------------┘
// 문자열 객체 비교
// name1과 name2의 참조값이 다르다.
boolean isEqual = name1 == name2;
System.out.println(isEqual); //false
}
public static void ex03() {
// equals 메소드
// 문자열이 동일하면 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); //true
boolean isEqual2 = name1.equals(name3); // 대소문자도 일치해야 동일한 문자열로 인식한다.
System.out.println(isEqual2); //false
boolean isEqual3 = name1.equalsIgnoreCase(name3);
// 대소문자를 무시하고 문자열을 비교한다. (Case=upper case, lower case)
System.out.println(isEqual3); //true
}
public static void ex04() {
// toUpperCase 메소드 : 모두 대문자로 변환
// toLowerCase 메소드 : 모두 소문자로 변환
String name = "Tom";
System.out.println(name.toUpperCase()); //TOM
System.out.println(name.toLowerCase()); //tom
}
public static void ex05() {
// length 메소드 : 문자열의 길이(글자수)를 반환
String name = "Tom cruise\n";
int length = name.length();
System.out.println(length); //11
}
public static void ex06() {
// charAt 메소드
// 문자열의 특정 인덱스(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
}
public static void ex07() {
// substring 메소드
// 문자열의 일부 문자열을 반환
// substring 사용법
// 1. substring(int begin) : 인덱스 begin부터 끝까지 반환
// 2. substring(int begin, int end) : 인덱스 begin부터 end 이전까지 반환(begin <= 추출범위 < end)
String name = "tom cruise";
String firstName = name.substring(0, 3);
String lastName = name.substring(4);
System.out.println(firstName); // tom
System.out.println(lastName); // cruise
}
public static void ex08() {
// indexOf 메소드
// 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);
}
public static void ex09() {
// lastIndexOf 메소드
// 1. 발견된 마지막 문자열의 인덱스를 반환
// 2. 나머지 특징은 indexOf와 동일함
String statement = "걱정한다고 걱정이 없어지면 걱정이 없겠네";
int idx = statement.lastIndexOf("걱정"); // 15
System.out.println(idx);
}
public static void ex10() {
// contains 메소드
// 지정된 CharSequence(String, char[] 등)가 포함되어 있으면 true 반환, 아니면 false 반환
String email = "admin@naver.com";
// @가 포함되어 있는가?
if (email.contains("@")) {
System.out.println("@가 포함되어 있다.");
} else {
System.out.println("@가 포함되어 있지 않다.");
}
}
public static void ex11() {
// isEmpty 메소드
// 1. 빈 문자열이면 true 반환, 아니면 false 반환
// 2. 빈 문자열 : ""처럼 문자열의 길이가 0인 문자열
String name = " ";
if (name.isEmpty()) {
System.out.println("이름이 없다.");
} else {
System.out.println("이름이 있다.");
} //이름이 있다.
// isBlank 메소드
// 1. 빈 문자열("")이거나 공백 문자(" ")로 구성되었다면 true 반환, 아니면 false 반환
// 2. JDK 11 이후 버전에서 사용 가능
if (name.isBlank()) {
System.out.println("이름이 없다.");
} else {
System.out.println("이름이 있다.");
} //이름이 없다.
}
public static void ex12() {
// format 메소드
// 1. 문자열을 지정한 형식으로 반환
// 2. 클래스 메소드이므로 String 클래스를 이용해서 호출함
// 숫자 형식
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 : 문자열로 표시
// 출력 폭 조정
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자리 문자열 표시, 문자열을 왼쪽 정렬 처리
}
public static void ex13() {
// strip 메소드
// 앞 뒤에 포함된 공백 문자 제거
String name = "\n tom \n";
String str1 = name.strip();
System.out.println(name.length()); //7
System.out.println(str1.length()); //3
// trim 메소드
// 앞 뒤에 포함된 공백 문자 제거
String str2 = name.trim();
System.out.println(str2.length());
}
public static void ex14() {
// replace 메소드
// 1. 지정된 문자열을 다른 문자열로 변환
// 2. 발견된 모든 문자열을 변환
String ip = "192.168.0.101";
String str = ip.replace(".", "_");
System.out.println(str);
}
public static void ex15() {
// 이 곳의 메소드는 정규식을 배운 다음에 사용합시다.
// 정규식을 활용한 메소드
// 1. startsWith : 지정된 정규식 패턴으로 시작하면 true 반환
// 2. endsWith : 지정된 정규식 패턴으로 끝나면 true 반환
// 3. matches : 지정된 정규식 패턴을 포함하면 true 반환
// 4. replaceAll : 지정된 정규식 패턴을 만족하는 부분을 다른 문자열로 변환
// 5. split : 지정된 정규식 패턴으로 문자열을 분리하여 분리된 String 배열을 반환
String ip = "192.168.0.101";
String str = ip.replaceAll(".", "_"); // 192_168_0_101을 기대하지만 정규식 패턴에서 .는 모든 문자를 의미하므로 원하는 결과를 얻을 수 없다.
System.out.println(str);
}
// StringBuffer 객체 선언
StringBuffer sb;
// StringBuffer 객체 생성
sb = new StringBuffer();
// append 메소드를 이용한 문자열 연결
sb.append("ha");
sb.append("va"); // +라면 hava같은 중간과정도 다 저장돼서 메모리 소비 심함
sb.append("na"); // 반복적으로 연결되는 경우에는 빌더나 버퍼 사용
// StringBuffer 객체에 저장된 문자열을 String으로 변환
String str = sb.toString();
System.out.println(str);
// StringBuilder 객체 선언
StringBuilder sb;
// StringBuilder 객체 생성
sb = new StringBuilder();
// append 메소드를 이용한 문자열 연결
sb.append("ha");
sb.append("va"); // +라면 hava같은 중간과정도 다 저장돼서 메모리 소비 심함
sb.append("na"); // 반복적으로 연결되는 경우에는 빌더나 버퍼 사용
// StringBuilder 객체에 저장된 문자열을 String으로 변환
String str = sb.toString();
System.out.println(str);
public static void ex01() {
double randomNumber = Math.random(); // 0.0 <= 난수 < 1.0 (0.0에서 0.999999999...의 난수 발생)
// 확률 처리하기
if (randomNumber < 0.1) { //대략 10%
System.out.println("대박");
} else {
System.out.println("꽝");
}
}
public static void ex02() {
/*
* 정수 난수로 바꿔서 사용하기
*
* 1단계 : Math.random() 호출 0.0<=n<1.0
* 2단계 : Math.random() *3 0.0<=n<3.0
* 3단계 : (int)(Math.random()*3) 정수로 캐스팅 0<=n<3
* 4단계 : (int)(Math.random()*3)+1 시작값 더하기 1<=n<4 (1부터 3개)
* -----------------------------------------------------------
* (int)(Math.random()*개수)+시작값
* (int)(Math.random()*개수+시작값)
*/
int randomNumber = (int) (Math.random() * 3) + 1; //1부터 3개의 난수 발생
System.out.println(randomNumber);
}

//Random 객체 선언 & 생성
Random random = new Random();
//실수
double randomNumber1 = random.nextDouble(); // 0.0<=n<1.0
//정수
int randomNumber2 = random.nextInt(); //Integer.Min_VALUE <= n <=Integer.MAX_VALUE
int randomNumber3 = random.nextInt(5); // 0 ~ 4 (5개 난수)

//현재 날짜와 시간
Date date1 = new Date();
System.out.println(date1);
// 타임스탬프 값에 해당하는 날짜와 시간
Date date2 = new Date(24 * 60 * 60 * 1000); //1일이 지난 타임스탬프
System.out.println(date2);

Date date = new Date(System.currentTimeMillis()); //현재 날짜
System.out.println(date);
//java.sql.Timestamp 클래스
//DB의 TIMESTAMP 타입을 처리하는 Timestamp 클래스
Timestamp timestamp = new java.sql.Timestamp(System.currentTimeMillis()); //현재 날짠
System.out.println(timestamp);

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));

// 현재 날짜와 시간
Calendar calendar = Calendar.getInstance();
// 구성요소 가져오기
int year = calendar.get(Calendar.YEAR); // Calendar.YEAR == 1 이므로 int year = calendar.get(1)과 같다.
int month = calendar.get(Calendar.MONTH) + 1; // 월(0~11) : 주의가 필요하다.
int day = calendar.get(Calendar.DAY_OF_MONTH); // 일(1~31)
int weekNo = calendar.get(Calendar.DAY_OF_WEEK); // 일(1), 월(2), ... 토(7)
int ampm = calendar.get(Calendar.AM_PM); // 오전(0), 오후(1)
int hour12 = calendar.get(Calendar.HOUR); // 12시각(1~12)
int hour24 = calendar.get(Calendar.HOUR_OF_DAY); // 24시각(0~23)
int minute = calendar.get(Calendar.MINUTE); // 분(0~59)
int second = calendar.get(Calendar.SECOND); // 초(0~59)
System.out.println(year);
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();
System.out.println(timestamp);
// Calendar를 이용해서 Date 알아내기
Date date = calendar.getTime();
System.out.println(date);

JDK 1.8 이후
1. 날짜 : java.time.LocalDate
2. 시간 : java.time.LocalTime
3. 둘다 : java.time.LocalDateTime
// 현재 날짜
LocalDate date1 = LocalDate.now();
System.out.println(date1);
// 특정 날짜
LocalDate date2 = LocalDate.of(2023, 7, 31); // 2023년 7월 31일
System.out.println(date2);
// 문자열 날짜 처리
LocalDate date3 = LocalDate.parse("2023-07-31"); // 기본 패턴 : yyyy-MM-dd
System.out.println(date3);

// 현재 시간
LocalTime time1 = LocalTime.now();
System.out.println(time1);
// 특정 시간
LocalTime time2 = LocalTime.of(15, 25, 30); // 15시 25분 30초
System.out.println(time2);
// 문자열 시간 처리
LocalTime time3 = LocalTime.parse("14:25:30"); // 기본 패턴 HH:mm:ss
System.out.println(time3);

// 현재 날짜와 시간
LocalDateTime dateTime1 = LocalDateTime.now();
System.out.println(dateTime1);
// 특정 날짜와 시간
LocalDateTime dateTime2 = LocalDateTime.of(2023, 7, 31, 15, 25, 30);
System.out.println(dateTime2);
// 문자열 형식의 날짜와 시간
LocalDateTime dateTime3 = LocalDateTime.parse("2023-07-31T15:28:30");
//날짜와 시간 사이에 대문자 T 적어서 날짜, 시간 구분
System.out.println(dateTime3);

// 패턴 지정하기
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);

LocalDateTime dateTime = LocalDateTime.now();
int year = dateTime.getYear(); // 년
int month = dateTime.getMonthValue(); // 월(1~12)
int day = dateTime.getDayOfMonth(); // 일
int hour = dateTime.getHour(); // 시(0~23)
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);

// Scanner 객체 선언 & 생성
Scanner sc = new Scanner(System.in);
// String 입력
System.out.println("이름을 입력하세요");
String name = sc.next(); // 이름에 공백이 없어야 한다.
System.out.println("입력된 이름: " + name);
// int 입력
System.out.println("나이를 입력하세요");
int age = sc.nextInt();
System.out.println("입력된 나이: " + age);
// double 입력
System.out.println("키를 입력하세요");
double height = sc.nextDouble();
System.out.println("입력된 키: " + height);
// 사용한 입력 스트림 종료(생략 가능하다.)
sc.close();
랜덤 흥미롭당
잘 읽었습니다. 좋은 정보 감사드립니다.