import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Locale;

 

public class D13_Calendar {

/*

# java.util.Calendar

 

- 달력을 구현해놓은 클래스

- 날짜 및 시간을 손쉽게 계산할 수 있는 기능들이 구현되어 있다

- 생성자 대신 getInstance()라는 스태틱 메서드로 인스턴스를 받아와 사용한다

*/

public static void main(String[] args) {

// Calendar.getInstance(); :

// 현재 시간이 담겨있는 캘린더 인스턴스를 받아오는 스태틱 메서드

Calendar now = Calendar.getInstance();

 

System.out.println(now);

 

// get(fieldNumber) : 필드 번호를 전달하여 해당 필드의 값을 가져온다

// 번호만으로는 필드를 외울 수 없기 때문에, 캘린더 클래스에 상수가 만들어져 있다

System.out.println(now.get(0));

System.out.println(now.get(1));

System.out.println(now.get(2));

System.out.println(now.get(3));

System.out.println(now.get(4));

 

// 여러 필드들이 있지만 상수가 있기 때문에 번호를 외울 필요가 없다

System.out.println("년: " + now.get(Calendar.YEAR));

// ※ 캘린더 클래스는 특이하게 월만 0부터 시작하게 만들어져 있다

System.out.println("월: " + now.get(Calendar.MONTH) + 1);

System.out.println("이번달의 몇 번째 주인가? " +

now.get(Calendar.WEEK_OF_MONTH));

System.out.println("올해의 몇 번째 날인가? " +

now.get(Calendar.DAY_OF_YEAR));

System.out.println("이번달의 몇 번쨰 날인가? " +

now.get(Calendar.DAY_OF_MONTH));

// 요일을 알 수 있지만 나와서 알기 힘들다

// 요일에 대한 상수도 캘린더에 정의되어 있다

System.out.println("이번주의 몇 번째 날인가(요일)? "+

now.get(Calendar.DAY_OF_WEEK));

 

System.out.println("일요일: " + Calendar.SUNDAY);

System.out.println("월요일: " + Calendar.MONDAY);

System.out.println("화요일: " + Calendar.TUESDAY);

System.out.println("수요일: " + Calendar.WEDNESDAY);

System.out.println("목요일: " + Calendar.THURSDAY);

System.out.println("금요일: " + Calendar.FRIDAY);

System.out.println("토요일: " + Calendar.SATURDAY);

 

System.out.println("12시: " + now.get(Calendar.HOUR));

System.out.println("24시: " + now.get(Calendar.HOUR_OF_DAY));

System.out.println(now.get(Calendar.MINUTE));

System.out.println(now.get(Calendar.SECOND));

System.out.println(now.get(Calendar.MILLISECOND));

 

// set(fieldNumber, value)

// 필드 번호로 필드를 선택하여 인스턴스의 특정 필드의 값을 변경하는 메서드

now.set(Calendar.DAY_OF_YEAR, 300);

//now.set(Calendar.DAY_OF_WEEK, 3);

 

System.out.printf("%d년 %d월 %d일 %d요일\n",

now.get(Calendar.YEAR),

now.get(Calendar.MONTH),

now.get(Calendar.DATE),

now.get(Calendar.DAY_OF_WEEK));

 

// add(fieldNumber, amount)

// 필드번호로 필드를 선택하여 해당 필드의 값을 더할 수 있다

Calendar now2 = Calendar.getInstance();

 

now2.add(Calendar.DATE, 5);

 

System.out.printf("%d월 %d일 %d요일\n",

now2.get(Calendar.MONTH) + 1,

now2.get(Calendar.DATE),

now2.get(Calendar.DAY_OF_WEEK));

 

// getDisplayName(field, style, Locale)

// : 달, 요일 등을 번호 대신 보기 좋은 문자 이름으로 꺼낸다

// style : 길게 표현할지 쨟게 표현할지 등을 결정한다

// Locale : 어떤 언어로 표현할지 결정한다

String dayOfWeek = now2.getDisplayName(

Calendar.DAY_OF_WEEK,

Calendar.SHORT_FORMAT,

Locale.KOREAN);

 

System.out.println(dayOfWeek);

 

/*

# SimpleDateFormat 클래스

 

- Date 타입 인스턴스를 편리하게 출력하는 기능이 구현되어 있는 클래스

- 캘린더 인스턴스로 Date 인스턴스를 꺼내서 사용 할 수 있다

 

- y : 년

- M : 월

- d : 일

- H : 24시

- h : 12시

- m : 분

- s : 초

- S : 밀리초

- E : 요일 (여러개 붙이면 길게)

- a : 오전/오후

*/

 

SimpleDateFormat sdf =

new SimpleDateFormat("yyyy-MM-dd a hh:mm:ss.SSS EEEEEEEEE");

 

// 캘린더 인스턴스의 getTime() 메서드로 Date타입 인스턴스를 생성 할 수 있다

String result = sdf.format(now.getTime());

System.out.println(result);

 

// 시간이 몇초만 달라도 equals가 false이기 때문에

// 같은 날짜인지 구분하기 위해 equals를 쓰는것은 불가능하다

Calendar cal1 = Calendar.getInstance();

Calendar cal2 = Calendar.getInstance();

 

cal1.set(2024, 0, 1);

cal2.set(2024, 0, 1);

 

System.out.println(cal1.equals(cal2));

}

}

'JAVA' 카테고리의 다른 글

JavaIO  (0) 2024.06.15
Exception  (0) 2024.06.12
Date  (0) 2024.06.07
정규표현식 (Regex)  (0) 2024.06.07
StringBuilder  (0) 2024.06.05

import java.util.Date;

 

public class D12_Date {

 

/*

# java.util.Date

 

- 시간 및 날짜 정보를 다루는 클래스

- 오래된 클래스이기 때문에 시간 정보 데이터 보관용으로만 사용하고

메서드는 잘 사용하지 않는다

*/

 

public static void main(String[] args) {

 

// 기본 생성자로 인스턴스 생성시 현재 시간이 나온다

Date now = new Date();

System.out.println(now);

 

// long타입 값을 전달하여 인스턴스 생성 시 원하는 시간으로 설정할 수 있다

// (1970년 1월 1일을 기준으로 시간을 설정할 수 있다 - 유닉스 타임)

Date d1 = new Date(0);

System.out.println(d1);

 

Date d2 = new Date(System.currentTimeMillis());

System.out.println(d2);

 

// System.currentTimeMillis() : 현재 시간의 유닉스 타임을 long타입으로 꺼내는 메서드

// ※ Unix Time - 1970년 1월 1일 오전9시 이후로 시간이 얼마나 흘렀는지

// 밀리초(1/1000)로 센 것

System.out.println("1970년 이후로 흐른 시간: "

+ System.currentTimeMillis() / 1000 + "초");

 

// 원하는 날짜로 시간을 생성하는 기능이 있지만 더 이상의 업데이트를 해주지 않는다

// (지원 중단)

Date d3 = new Date(2002, 5, 5);

System.out.println(d3);

 

now = new Date();

Date onceOpenATime = new Date(2000);

 

// date.after(anotherDate)

// date.before(anotherDate)

//두 시점을 비교해 어떤 시점이 더 뒤인지 알수 있다

System.out.println("now가 onceOpenATime보다 이후 시점이니? "

+ now.after(onceOpenATime));

System.out.println("now가 onceOpenATime보다 이전 시점이니? "

+ now.before(onceOpenATime));

 

// getTime() : 인스턴스로부터 해당 시간의 유닉스 타임을 꺼낼 수 있다

System.out.println(now.getTime());

System.out.println(onceOpenATime.getTime());

 

// setTime(unixTime) : 유닉스 타입을 전달해 인스턴스의 시간을 변경한다

now.setTime(1000000000000L);

 

System.out.println(now);

 

// 다양한 getter들이 존재하지만 모두 지원 중단되어서 별로 사용되지는 않는다

System.out.println(now.getYear());

System.out.println(now.getMonth());

System.out.println(now.getHours());

System.out.println(now.getMinutes());

System.out.println(now.getDay());

 

}

}

'JAVA' 카테고리의 다른 글

Exception  (0) 2024.06.12
Calendar  (0) 2024.06.11
정규표현식 (Regex)  (0) 2024.06.07
StringBuilder  (0) 2024.06.05
String  (0) 2024.06.04

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class D11_Regex {
/*
   # 정규표현식 (Regular Expression)
  
   - 문자열이 특정 패턴과 일치하는지 검사할 수 있는 표현식
   - 자바에만 있는 것이 아니라 언어에 종속되지 않은 공통의 규칙이다
  
   # java.util.regex.Pattern
  
   - 자바에서 정규표현식을 활용하기 위한 클래스
  
   # java.util.regex.Matcher
  
   - 검사하고자 하는 문자열에 정규표현식을 적용한 결과를 담고있는 객체
   - 정규표현식에 해당하는 문자열의 위치 정보를 모두 담고 있다
 */
public static void main(String[] args) {
// Pattern.matches(regex, str) : 문자열이 정규표현식에 해당하는 문자열인지 검사하는 메서드 
System.out.println(Pattern.matches("sleep", "sleep"));

// [] : 해당 위치에 허용할 문자를 정의하는 정규표현식 문법
System.out.println(Pattern.matches("s[lh]eep", "sleep"));
System.out.println(Pattern.matches("s[lh]eep", "sheep"));
System.out.println(Pattern.matches("s[lh]eep", "skeep"));
System.out.println(Pattern.matches("s[lh]e[ea]p", "sheap"));
System.out.println(Pattern.matches("s[lh]e[ea]p", "sleap"));

System.out.println(Pattern.matches("01[01679]-", "017-"));

// \는 정규표현식에서도 특수한 기능을 지니고 있기 때문에
// 정규표현식에서 \\가 될 수 있도록 자바 문자열에서는 4개를 적어줘야 한다 
System.out.println(Pattern.matches("C:[/\\\\]", "C:\\"));

/*
  # []내부에 사용할 수 있는 문법들
 
  [abc] : a 또는 b 또는 c 허용
  [a|b|c] : a 또는 b 또는 c 허용
  [a-z] : a ~ z까지 모두 허용
  [a-zA-Z]: 모든 알파벳 허용
  [a-f&&d-i] : 두 조건을 모두 만족하는 경우만 허용 
 
*/
System.out.println(Pattern.matches("[a-h]at", "hat"));
System.out.println(Pattern.matches("[a-h]at", "cat"));
System.out.println(Pattern.matches("[a-h]at", "aat"));
System.out.println(Pattern.matches("[a-h]at", "Cat"));
System.out.println(Pattern.matches("[a-hA-H]at", "Cat"));
System.out.println(Pattern.matches("[a-c&&b-d]at", "bat"));
System.out.println(Pattern.matches("[a-c&&b-d]at", "cat"));
System.out.println(Pattern.matches("[a-c&&b-d]at", "dat"));

/*
   # 한번에 여러 문자를 나타낼 수 있는 것들
  
   . : 그 자리에 모든 문자를 허용, [.] 또는 \.은 .만 허용하겠다는 뜻
   \d : 그 자리에 모든 숫자를 허용
   \D : 그 자리에 숫자를 제외한 모든 것을 허용
   \s : 그 자리에 모든 공백을 허용 (' ', \t, \n, ...)
   \S : 그 자리에 공백를 제외한 모든 것을 허용
   \w : 그 자리에 일반적인 문자들을 허용 ([a-zA-Z0-9_]와 같음)
   \W : 그 자리에 \w제외한 모든 것을 허용 
*/
System.out.println(Pattern.matches("...p", "skip"));
System.out.println(Pattern.matches("...p", "ship"));
System.out.println(Pattern.matches("...p", "shik"));
System.out.println(Pattern.matches("\\...p", ".hip"));
System.out.println(Pattern.matches("[.]..p", ".ppp"));
System.out.println("공백: " + Pattern.matches("\\s\\d\\d", " 23"));
System.out.println(Pattern.matches("\\d\\d\\d", "12a"));
System.out.println(Pattern.matches("\\D\\D", " b"));
System.out.println(Pattern.matches("[\\da-z]..", "#ip"));

/*
   # 해당 패턴이 적용될 문자의 개수를 지정하기
  
   {n}  : {}앞의 패턴이 n개 반복되어야 한다
   {n, m}  : {}앞의 패턴이 n개 이상 m개 이하 반복되어야 한다
   {n,} : {}앞의 패턴이 n개 이상 반복되어야 한다
   ? : ?앞의 패턴이 0번 또는 한 번 나와야 한다
   + : +앞의 패턴이 최소 한 번 이상 나와야 한다
   * : *앞의 패턴이 0번 이상 나와야 한다
*/
System.out.println("ddd" + Pattern.matches("[\\S+]", "난 "));
System.out.println(isValidInput("ㅇㅇ"));
System.out.println(Pattern.matches("\\d{6}", "12345a"));
System.out.println(Pattern.matches("\\d{6,8}", "12345678"));
System.out.println(Pattern.matches("\\w{3,}", "ab"));
System.out.println(Pattern.matches("[3,6]?", ""));
System.out.println(Pattern.matches("[3,6]?", "5"));
System.out.println(Pattern.matches("[1,9]+", ""));
System.out.println(Pattern.matches("[1,9]+", "9999"));
System.out.println(Pattern.matches("[ABCDF][+-]?", "A"));
System.out.println(Pattern.matches("[1,9]*", "123"));

// 여태 배운 문법들을 소괄호로 묶어서 적용하는 것이 가능하다
System.out.println(Pattern.matches("([ABCDF][+-]?){2,}", "A+F"));

// 연습1: 해당 문자열이 핸드폰 번호인지 검사할 수 있는 정규표현식을 만들어보세요
System.out.println(Pattern.matches("01[01679]-\\d{4}-\\d{4}", "010-1234-1234"));
Pattern.matches("010-?[0-9]{4}-?[0-9]{4}", "010-1234-1234");
Pattern.matches("010-?[0-9]{4}-?[0-9]{4}", "010-1234-1234");
Pattern.matches("01[01679]-?[0-9]{3,4}-?[0-9]{4}", "010-1234-1234");
// 연습2: 해당 문자열이 이메일인지 검사할 수 있는 정규표현식을 만들어보세요
System.out.println(Pattern.matches("\\w{1,}[@]\\w{1,}[.]\\w{1,}[.\\w]*", "asd2123@naver.com"));
Pattern.matches("\\w+@\\w+\\.\\w+(\\.\\w+)?", "123.a123@av2.go.kr");
// 연습3: 해당 문자열이 IP주소인지 검사할 수 있는 정규표현식을 만들어보세요
// (0.0.0.0 ~ 255.255.255.255)
System.out.println(Pattern.matches("[0-9]|[0-9][0-9]|[0-1][0-9][0-9]|[0-2][0-5][0-5][.][0-9]|[0-9][0-9]|[0-1][0-9][0-9]|[0-2][0-5][0-5][.]"
+ "[0-9]|[0-9][0-9]|[0-1][0-9][0-9]|[0-2][0-5][0-5][.][0-9]|[0-9][0-9]|[0-1][0-9][0-9]|[0-2][0-5][0-5]", "0.1.2.4"));

Pattern.matches("((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])[.]){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])", "10.199.255.4");


String text = "apple/kiwi/banana/kiwi/mango/kiwi/kiwibird/kiwijuice/"
+ "golekiwi/redkiwi/redapple/greenapple";

// Pattern.compile(regex) : 전달한 정규표현식으로 인스턴스를 하나 생성한다 
Pattern kiwiPattern = Pattern.compile("(\\w*)(kiwi)(\\w*)");

Matcher kiwiMatcher = kiwiPattern.matcher(text);
System.out.println("---------------------------------------------");
// fine()를 통해 다음 결과로 이동한다
// 다음 결과가 있으면 true를 반환하고 없으면 false를 반환한다
while (kiwiMatcher.find()) {
// group(0) : 정규표현식에 걸린 문자열 전체를 의미함
// group(1) : 첫 번째 ()에 걸린 문자열을 의미함
// group(2) : 두 번째 ()에 걸린 문자열을 의미함
System.out.println("이번에 fine()한 것: " + kiwiMatcher.group(2));
System.out.println("이번에 fine()한 시작 위치: " + kiwiMatcher.start(2));
System.out.println("이번에 fine()한 마지막 위치: " + kiwiMatcher.end(2));
System.out.println("-----------------------------------------------");
}

// 연습 : 위의 text에서 apple를 모두 찾아 kiwi로 교체한 문자열을 생성
String replaced = text.replaceAll("apple", "kiwi");
System.out.println(replaced);
}
}

'JAVA' 카테고리의 다른 글

Calendar  (0) 2024.06.11
Date  (0) 2024.06.07
StringBuilder  (0) 2024.06.05
String  (0) 2024.06.04
HashMap  (0) 2024.06.02

public class D10_StringBuilder {

/*

# StringBuilder

 

- 문자열을 조립할 때 쓰는 기능들이 모여있는 클래스

- += 누적 연산을 사용해 문자열을 조립하는 것보다 속도가 훨씬 빠르다

- String은 내부가 배열로 되어있어서 한번 만들어지면 수정이 불가능한 객체이기 때문에

+= 연산을 할때마다 새로운 객체를 생성하여 속도가 느리다

*/

public static void main(String[] args) {

long start_time = System.currentTimeMillis();

String str = "";

 

// +=을 할때마다 새 String 인스턴스를 만들기 떄문에 엄청 느리다

for (int i = 0 ; i < 10; ++i) {

str += i + "\n";

}

System.out.println(str);

long end_time = System.currentTimeMillis();

 

long start_time2 = System.currentTimeMillis();

StringBuilder sb = new StringBuilder();

 

 

for (int i = 0; i < 10; ++i) {

// append() : +=의 역할을 한다(빌더에 문자열을 추가한다)

sb.append(i + "\n");

}

 

// StringBuilder로 완성된 문자열을 toString()으로 뽑아낼 수 있다

System.out.println(sb);

 

long end_time2 = System.currentTimeMillis();

 

System.out.println("소요 시간1: " + (end_time - start_time) + "ms");

System.out.println("소요 시간2: " + (end_time2 - start_time2) + "ms");

 

// 기존에 있던 문자열을 스트링빌더로 만들어 활용할 수 있다

String text = "apple";

StringBuilder sb2 = new StringBuilder(text);

 

// append() : 뒤에 데이터 추가

sb2.append("/orange");

System.out.println(sb2);

 

// insert(offset, data) : 원하는 곳에 데이터 추가

sb2.insert(0, "pine");

System.out.println(sb2);

 

// delete(start, end) : 원하는 만큼 문자 삭제

sb2.delete(4, 9);

System.out.println(sb2);

 

// replace(start, end, str) : 원하는 문자열 교체

sb2.replace(0, 4, "grape");

System.out.println(sb2);

 

// substring(start, end) : 원하는 위치의 문자열을 자른 인스턴스를 반환

// substring(start) : 해당 위치부터 마지막까지...

String sub = sb2.substring(6, 10);

String sub2 = sb2.substring(6);

System.out.println(sub);

System.out.println(sub2);

System.out.println("원본은 substring 후에도 유지된다: " + sb2);

 

// reverse() : 뒤집는다

sb2.reverse();

System.out.println(sb2);

sb2.reverse();

 

// setCharAt(index, ch) : 한 글자를 수정할 수 있다

sb2.setCharAt(0, 'G');

System.out.println(sb2);

 

// indexOf(str) : 찾은 문자열의 위치를 반환한다 (못찾으면 -1 반환)

sb2.setCharAt(sb2.indexOf("o"), 'O');

System.out.println(sb2);

}

}

'JAVA' 카테고리의 다른 글

Date  (0) 2024.06.07
정규표현식 (Regex)  (0) 2024.06.07
String  (0) 2024.06.04
HashMap  (0) 2024.06.02
Comparator  (0) 2024.05.31

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

 

public class D09_String {

 

public static void main(String[] args) {

String fruits = "apple/banana/orange/kiwi";

 

// "".split(delim) : 문자열을 원하는 문자를 기준으로 자른 배열을 반환

String[] fruitArr = fruits.split("/");

 

System.out.println(Arrays.toString(fruitArr));

for (String fruit : fruitArr) {

System.out.println(fruit);

}

 

// String.join(delim, iterable)

// : iterabal(하나씩 꺼낼 수 있는)객체를 원하는 기준으로 모두 이어붙인

// 하나의 문자열을 생성한다

List<String> zoo = new ArrayList<>();

 

zoo.add("코끼리");

zoo.add("사자");

zoo.add("호랑이");

 

String result = String.join("#", zoo);

System.out.println(result);

result = String.join("###", fruits);

System.out.println(result);

 

// charAt(index) : 원하는 위치의 문자 하나를 반환 받는다

// (String은 문자 하나만 꺼내는 것은 가능하지만, 문자를 수정하는 것은 불가능하다)

System.out.println("ABC".charAt(0));

 

// "".contains(str) : 원하는 문자열이 포함되어 있는지 체크한다

System.out.println("Pineapple".contains("apple"));

 

// "".startsWith(str) : 해당 문자열이 전달한 문자열로 시작하는지 확인한다

String url = "http://naver.com";

 

System.out.println(url.startsWith("https://"));

 

// "".endsWith(str) : 해당 문자열이 전달한 문자열로 끝나는지 확인한다

String path = "C:\\Programe files\\Java\\tiger.jpg";

 

System.out.println(path.endsWith(".jpg"));

System.out.println(path.endsWith(".gif"));

 

// "".replace(old, new) : 해당 문자열의 일부를 교체한다

String email = "abc123@naver.com";

String gmail = email.replace("naver", "gamil");

String microsoft = email.replace("naver", "microsoft");

 

System.out.println(gmail);

System.out.println(microsoft);

 

// "".substring(start) : 해당 문자열을 원하는 위치부터 자른 인스턴스를 반환

String alphabet = "abcdefghijklmnop";

 

System.out.println(alphabet.substring(5));

 

// "".substring(start, end)

// : 해당 문자열을 start이상 end미만으로 자른 문자열 인스턴스를 반환

System.out.println(alphabet.substring(0, 8));

System.out.println(alphabet.substring(3, 6));

System.out.println(alphabet.substring(0, 10));

System.out.println(alphabet.substring(10));

 

// "".trim() : 문자열 외곽의 공백을 제거한 인스턴스를 반환한다

String answer = "사과";

String userInput = " 사과 ";

String userInput2 = " 사 과 ";

 

// trim()은 내부의 공백까지 제거해주지는 않는다

System.out.println(userInput2);

System.out.println(userInput2.trim());

 

// replace()를 활용해서 내부의 공백까지 제거할 수 있다

System.out.println(userInput2.replace(" ", ""));

 

System.out.println(answer.equals(userInput));

System.out.println(answer.equals(userInput.trim()));

 

// "".toUpperCase() : 해당 문자열을 모두 대문자로 변환한 새 인스턴스를 반환

// "".toLowerCase() : 해당 문자열을 모두 소문자로 변환한 새 인스턴스를 반환

String cmd = "quit";

String userCmd = "Quit";

 

System.out.println(cmd.equals(userCmd));

System.out.println(cmd.equals(userCmd.toLowerCase()));

 

// "".indexOf(str) : 해당 문자열에서 전달한 문자열을 찾아서 위치를 반환

String text = "I like apple and applepie"

+ "I like apple and applepie"

+ "I like apple and applepie"

+ "I like apple and applepie";

 

System.out.println(text.indexOf("apple"));

 

// "".indexOf(str, start) : 문자열을 어디서부터 찾기 시작할건지 결정할 수 있다

System.out.println(text.indexOf("apple", 10));

 

// 반복문을 활용해서 위의 text에서 모든 알파벳 'ap'의 위치를 찾아 콘솔에 출력해보세요

 

System.out.println();

 

// int i = 0;

// while (i < text.length()) {

// char ch = text.charAt(i);

// if (ch == 'a' || ch == 'A') {

// char ch2 = text.charAt(i + 1);

// if (ch2 == 'p' || ch2 == 'P') {

// System.out.println(i + "번째 위치에 ap가 있습니다.");

// }

// }

// ++i;

// }

 

// int found = -1;

// while (true) {

// found = text.indexOf("ap", found + 1);

//

// if (found == -1) {

// System.out.println("더 이상 찾을 수 없습니다");

// break;

// } else {

// System.out.println("찾은 곳: " + found);

// }

// }

 

// int found = -1;

// while ((found = text.indexOf("ap", found + 1)) != -1) {

// System.out.println("찾은 곳: " + found);

// }

 

int found = -1;

while (true) {

found = text.indexOf("ap", found + 1);

 

if (found == -1) {

break;

}

System.out.println("찾은 곳: " + found);

}

 

// "".lastIndexOf(str) : 원하는 문자열을 뒤에서부터 찾아준다

System.out.println(text.lastIndexOf("ap"));

 

// "".lastIndexOf(str, start) : 원하는 지점부터 찾기 시작할 수 있다

System.out.println(text.lastIndexOf("ap", 91));

 

// String.format(fmt, values...) :

String timeStr = String.format("%02d:%02d:%02d", 7, 15, 35);

 

System.out.println(timeStr);

 

// String.valueOf(value) : 해당 값을 문자열로 변환한 인스턴스를 반환한다

String value1 = "" + 12345;

String value2 = String.valueOf(12345);

 

System.out.println(value1 + value2);

System.out.println(value1 == value2);

System.out.println(value1.equals(value2));

'JAVA' 카테고리의 다른 글

정규표현식 (Regex)  (0) 2024.06.07
StringBuilder  (0) 2024.06.05
HashMap  (0) 2024.06.02
Comparator  (0) 2024.05.31
LinkedList  (0) 2024.05.29

Map

   - 데이터를 Key/Value 방식으로 저장할 수 있는 자료구조
   - 인덱스 번호 대신 Key값을 사용해 원하는 Value를 꺼낼 수 있다 
   - Key는 중복이 허용되지 않는다 (꺼낼 때 Set으로 꺼낸다)
   - Value는 중복이 허용된다 (꺼낼 때 Collection으로 꺼낸다)

 

 

HashMap<String, Object> info = new HashMap<>();

첫 번째 제네릭 (String) : Key의 타입
두 번째 제네릭 (Object) : Value의 타입

 

put(K, V) : key값과 value값을 짝을 지어서 넣을수 있다

info.put("이름", "홍길동");
info.put("나이", 30);
info.put("군필", true);

 

get(Key) : 키를 사용해 값을 꺼낸다

System.out.println(info.get("이름"));
System.out.println(info.get("나이"));
System.out.println(info.get("군필"));

 

 

※ 같은 Key값으로 put()하면 덮어쓰기 된다 

info.put("이름", "오혜준");

 

 

'JAVA' 카테고리의 다른 글

StringBuilder  (0) 2024.06.05
String  (0) 2024.06.04
Comparator  (0) 2024.05.31
LinkedList  (0) 2024.05.29
HashSet  (0) 2024.05.28

# Comparable
 

 

  - 이 인터페이스를 구현한 클래스는 크기 비교가 가능해진다
  - compareTo() 메서드를 구현해두면 크기 비교가 필요한 상황에서
    해당 메서드를 호출해 크기를 비교할 수 있게 된다
 

# Comparator
 

  - 이 인터페이스를 구현한 클래스는 크기 비교의 기준이 된다
  - 이 인터페이스를 구현한 클래스의 인스턴스를 필요한 상황에서 함께 전달할 수 있다

 


Wrapper 클래스들은 Comparable이 이미 구현되어 있으므로

compareTo() 메서드를 직접 구현할 필요가 없다

List<Integer> nums = new ArrayList<>();

Collections.addAll(nums, 88, 89, 90, 15, 10, 11, 12, 13, 1, 99);

Collections.sort(nums);

System.out.println(nums);


Comparable 인터페이스를 구현한 클래스는 각 인스턴스끼리의 크기 비교가 가능해진다
(-> 정렬이 가능해 진다)

class Grape implements Comparable<Grape> {
	String farm;
	int qty;
	double sweet;
	String grade;
	
	public Grape(String farm, int qty, double sweet, String grade) {
		this.farm = farm;
		this.qty = qty;
		this.sweet = sweet;
		this.grade = grade;
	}
}

먼저 Comparable을 상속받는 Grape 클래스를 만들어준다

그 후 Grape 클래스 안에 compareTo() 메서드를 override

@Override
	public int compareTo(Grape g) {
		/*
			현재 인스턴스와 매개변수로 전달받은 인스턴스를 비교하였을 때
			
			어떤 것이 더 크다고 판정할것인지 정해야 한다
			
			두 인스턴스의 크기가 같다 : 0을 리턴
			현재 인스턴스의 크기가 더 크다 : 1을 리턴
			매개변수 인스턴스의 크기가 더 크다 : -1을 리턴
		 */
		
		// 예시: 포도알의 개수를 기준으로 두 인스턴스의 크기를 비교
		if (this.qty == g.qty) {
			// 포도알 개수가 같으면 당도를 기준으로 다시 크기 비교
			if (this.sweet == g.sweet) {
				return 0;
			} else if (this.sweet > g.sweet) {
				return 1;
			} else {
				return -1;
			}
			
		} else if (this.qty > g.qty) {
			return 1;
		} else {
			return -1;
		}
	}
List<Grape> grapes = new ArrayList<>();

 

'JAVA' 카테고리의 다른 글

String  (0) 2024.06.04
HashMap  (0) 2024.06.02
LinkedList  (0) 2024.05.29
HashSet  (0) 2024.05.28
Comparator  (0) 2024.05.27

- ArrayList보다 데이터의 추가/삭제 속도가 더 빠른 리스트
- 각 데이터 덩어리(노드)가 다음 데이터의와 이전 데이터의 위치를 함께 보관한다
- ArrayList와 같은 List 인터페이스이기 때문에 사용법은 거의 똑같다

 

add(Object);

LinkedList<String> fruits = new LinkedList();

fruits.add("strawBerry");
fruits.add("apple");
fruits.add("orange");
fruits.add("mandarin");

 

 

addFirst() : 첫번째 index에 원하는 값을 넣는다

addLast() : 마지막 index에 원하는 값을 넣는다

fruits.addFirst("watermelon");
fruits.addLast("banana");

 

 

 

add(index, data) : 원하는 위치에 데이터 추가

fruits.add(3, "coconut");

0 : watermelon 1: strawBerry 2: apple 3: coconut

 

remove()

삭제한 값을 반환해준다

 

remove(), removeFirst(): 맨 앞의 데이터(haed)를 지운다

-remove() 괄호안에 아무값도 넣지 않을시 맨앞의 데이터를 지운다

 

remove(index) : 원하는 위치의 값을 지운다

fruits.remove(2);

index 2번째 값인 apple이 지워진다

 

removeFirst() : 첫번째 index 값을 지운다

removeLast() : 마지막 index 값을 지운다

 

ArrayList LinkedList는 모두 List 인터페이스 소속이기 때문에 List로 업캐스팅하여 활용하다

 

List<String> list = new LinkedList<>();

 

업캐스팅을 더 거슬러 올라간다면 컬렉션까지도 갈 수 있다
List set Collection 인터페이스의 자식 인터페이스이다

 

Collection<String> col1 = new LinkedList<>();
Collection<String> col2 = new HashSet<>();

 

모든 컬렉션은 배열로 변환될 수 있다

 

list.add("무궁화호");
list.add("새마을호");
list.add("통일호");
String[] str = new String[list.size()];
list.toArray(str);
System.out.println(Arrays.toString(str));

 

 

// list1.addFirst();

 

업캐스팅 된 상태이기 때문에 LinkedList만의 메서드는 사용할 수 없는 상태

'JAVA' 카테고리의 다른 글

HashMap  (0) 2024.06.02
Comparator  (0) 2024.05.31
HashSet  (0) 2024.05.28
Comparator  (0) 2024.05.27
Collections  (0) 2024.05.25

+ Recent posts