JavaApi

이현주·2023년 7월 31일
1

JAVA

목록 보기
6/12
post-thumbnail

String

String

문자열 리터럴(Literal)

문자열 표현 방법: 큰따옴표로 문자열을 묶는다.

문자열 리터럴은 Java 에 의해서 최적화 되기 때문에 동일한 리터럴이 2번 이상 나타나면 기존 리터럴을 재사용한다.

[문자열 리터럴 비교]
name1과 name2의 참조값이 동일하다.



 String name1 = "tom";
 String name2 = "tom";
    
    boolean isEqual = name1 == name2;
    System.out.println(isEqual);

출력:true

문자열 객체(Object)

문자열 객체는 항상 새로 생성된다.

[문자열 객체 비교]
name1과 name2의 참조값이 다르다.

 String name1 = new String("tom");
 String name2 = new String("tom");
   
   boolean isEqual = name1 == name2;
   System.out.println(isEqual);

출력:false

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);
    
    boolean isEqual2 = name1.equals(name3);  // 대소문자도 일치해야 동일한 문자열로 인식한다.
    System.out.println(isEqual2);
    
    boolean isEqual3 = name1.equalsIgnoreCase(name3);  // 대소문자를 무시하고 문자열을 비교한다.
    System.out.println(isEqual3);
출력:
true
false
true

toUpperCase, toLowerCase

toUpperCase메소드:모두 대문자로 변환
toLowerCase메소드:모두 소문자로 변환

    String name="Tom";
    
    System.out.println(name.toUpperCase());
    System.out.println(name.toLowerCase());
출력:
TOM
tom

length 메소드

문자열의 길이(글자수)를 반환

  String name="Tom cruise\n";
  
  int length=name.length();
  System.out.println(length);//11

출력:11

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

출력:t,o,m

substring 메소드

문자열의 일부 문자열을 반환
[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

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

출력:
0
6
15
-1

lastIndexOf 메소드

1.발견된 마지막 문자열의 인덱스를 반환
2. 나머지 특징은 indexOf와 동일함

 String statement="걱정한다고 걱정이 없어지면 걱정이 없겠네";
 
 int idx=statement.lastIndexOf("걱정");
 System.out.println(idx);//15

출력:15

contains메소드

지정된 CharSequence(String, char[]등) 가 포함되어 있으면 true 반환, 아니면 false 반환

    String email="admin@naver.com";
    
    if(email.contains("@")) {
      System.out.println("@가 포함되어있다.");
      
    }
    else {
      System.out.println("@가 포함되어있지 않다");
    }

출력:@가 포함되어있다.

isEmpty 메소드

1.빈 문자열이면 true 반환, 아니면 false 반환
2.빈 문자열: "" 처럼 문자열의 길이가 0인 문자열

   String name=" ";
   if(name.isEmpty()) {
     System.out.println("이름이 없다.");
   }
   else {
     System.out.println("이름이 있다.");
   }
   

출력:
이름이 있다.

isBlank메소드

1.빈 문자열이거나, 공백문자로 구성되었다면 true 반환 아니면 false 반환
2.JDK11 이후 버전에서 사용 가능

    if(name.isBlank()) {
      System.out.println("이름이 없다");
    }
    else {
      System.out.println("이름이 있다");
    }

출력:
이름이 없다.

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)
출력:
144
100
64
64

문자열 형식

  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

정규식을 활용한 메소드

  1. startsWith : 지정된 정규식 패턴으로 시작하면 true 반환
  2. endsWith : 지정된 정규식 패턴으로 끝나면 true 반환
  3. matches : 지정된 정규식 패턴을 포함하면 true 반환
  4. replaceAll : 지정된 정규식 패턴을 만족하는 부분을 다른 문자열로 변환
  5. split : 지정된 정규식 패턴으로 문자열을 분리하여 분리된 String 배열을 반환
   String ip="192.168.0.101";
   String str= ip.replaceAll(".","_");
   System.out.println(str);//192.168.0.101을 기대하지만 정규식에서 .는 모든 문자를 의미하므로 원하는 결과를 얻을 수 없다.

출력:
_____

strip 메소드

앞 뒤에 포함된 공백 문자 제거

  String name="\n tom\n";
  String str1=name.strip();
  System.out.println(str1.length());//3

출력:
3

trim 메소드

앞 뒤에 포함된 공백 문자 제거

String str2 =name.trim();
System.out.println(str2.length());//3

출력:
3

replace 메소드

1.지정된 문자열을 다른 문자열로 변환하는 역할을 수행
2. 발견된 모든 문자열을 변환

 String ip="192.168.0.101";
 String str=ip.replace(".", "_");
 System.out.println(str);

출력:
192_168_0_101


StringBuffer

java.lang.StringBuffer 클래스

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


StringBuilder

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

Random

Math

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

SecureRandom

java.security.SecureRandom 클래스

  1. 보안 처리된 난수를 발생한다.

  2. 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

java.util.UUID

  1. 전역 고유 식별자(Universal Unique ID)라는 뜻이다.
  2. 32개의 16진수를 랜덤하게 생성한다.
  3. UUID를이용해서 생성한 값은 중복이 없는것으로 처리한다.
  4. 생성된 UUID 값은 String으로 바꿔서 사용한다.
    UUID uuid=UUID.randomUUID();
    String str= uuid.toString();
    System.out.println(str);

Date,Time

System

Timestamp(타임스탬프)

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


java_util_Date

현재 날짜와 시간

    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


java.sql.Date

java.sql.Date 클래스

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
2023-07-31 22:23:30.449

SimpleDateFormat

java.text.SimpleDateFormat 클래스

  1. 날짜, 시간 형식을 지정할 수 있는 클래스이다.

  2. 원하는 형식을 패턴(pattern)으로 전달 할 수 있다.

  3. 패턴
    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
23/07/31 월 22:29:08

Calendar

java.util.Calendar 클래스

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);
출력:
2023
2023
6
2
2
10
10
22
36
12
2022

특정날짜로 변경

//현재 날짜와 시간
    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

LocalDateTime

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);
출력:2023
7
31
22
56
47

Scanner

java.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

profile
졸려요

0개의 댓글