냥코딩쟝
1. [ String 클래스의 메서드 활용 ]
    String path = "C:\\SS18Class5\\JavaClass\\javaPro\\src\\days20\\SS18교육생명단.txt";
   위의 절대경로에서 순수 파일명만  String fileName 변수에 저장하고            SS18교육생명단
   파일명의 확장자만  String extender 변수에 저장하세요.                            .txt

      String path = "C:\\SS18Class5\\JavaClass\\javaPro\\src\\days20\\SS18교육생명단.txt";
   String fileName;
   String extender;
   
   int idx1 , idx2;
   idx1 = path.lastIndexOf("\\");
   idx2 = path.lastIndexOf(".");
   
   fileName = path.substring(idx1+1, idx2);  // beginIndex, endIndex
   System.out.println(  fileName );
   
   extender = path.substring(idx2);                 // beginIndex ~ 자동으로 문자열 끝까지~
   System.out.println(  extender );

2. 객체로 부터 [Class 객체]를 얻어오는 3가지 방법에 대해서 설명하세요 .
    Class 객체 얻어오는 이유 ? 객체가   어떤 클래스를 가지고 생성되었는지 클래스 정보를 얻어올 필요가 있다.  
    
    Person     p1 = new Person();
       클래스     객체    
    
  ㄱ.  Class    Object.getClass()
  ㄴ.  Class    클래스명.class    static필드
  ㄷ.  Class     Class.forName("fullName")       JDBC 수업 할때 이 코딩...
   

3. String 클래스의 메서드 설명 - 기능, 매개변수, 리턴값(리턴자료형)
ㄱ. length()  
 ㄴ. charAt()  
 ㄷ. compareTo() 
 ㄹ. equals() / equalsIgnoreCase()  
 ㅁ. concat()   
 ㅅ. startsWith()  
 ㅇ. endWith()     
 ㅈ. indexOf()      
     lastIndexOf()  
 ㅊ. replace()     
           replaceAll( regex )
           replaceFirst(regex)
 ㅋ. String [] split()
 ㅌ. toUpperCase() / toLowerCase()
 ㅍ. trim()           
 ㅎ. valueOf()      
 ㄱ. join()
 ㄴ. format()  
 ㄷ. matches()
 ㄹ. substring() 
 :
 :    
 
 5. [기본형]을 String 으로 변환하는 코딩을 하세요..
     자바의 자료형( Data Type)
        1) 기본형 8가지
           
        2) 참조형 - 배열, 클래스(String), 인터페이스
        
        int n = 65;   --> "65"
        char c = 'a';  --> "a"
        boolean b = true --> "true"
        double d = 3.14   -->  "3.14"
        
       1)          n + "" 
       2)         new String( 자료형)  X
       3)         String String.valueOf()  
        
 
6.   아래 코딩을 이해하는 만큼 주석을 달아서 설명하세요.  
public static void main(String[] args) throws UnsupportedEncodingException {
   한글 한 문자 -> 인코딩 방식  바이트수 달라요..
                             euc-kr     [][]
    가                         utf-8      [][][]       

   String str = "가";    // "가" 라는 문자열을   str 변수에 저장..    
   byte [] bArr = str.getBytes("UTF-8");     
    // getBytes(   인코딩  ) 메서드로     문자열 str을 byte [] 로 변환
    //  
   System.out.println("UTF-8 : " + new String(bArr,"UTF-8"));  
} 

7. [Object 클래스]의  equals() 메서드와   == 연산자를 비교해서 차이점을 설명하세요. 
    1) ==  비교연산자 
         기본형 == 기본형  ( 값 )
        객체  == 객체     ( 참조주소값 )
   2) equals()
       객체.equals( 객체)     ( 참조주소값 )       
       
       객체 비교할 때는 같은 기능을 한다. 
       물려받은 equals() 메서드를 모두 ( 대부분 ) 재정의 해서 사용한다. 

       Point p1 = new Point(1,2);
       Point p2 = new Point(1,2);
       
       p1 == p2 false;
       p1.equals( p2)  false;
       
       x,y 두 좌표 값이 같으면 같은 객체라고 처리 하기 위해서   equals() 메서드를 오버라이딩 했다. 

8. String 클래스의 메서드 사용
   String str1 = "안녕하세요. 홍길동입니다."; 
   1)  안녕 문자열 뒤에 (Hello) 문자열을  삽입(insert) =>  "안녕(Hello)하세요. 홍길동입니다."
   2)  홍길동을 찾아서 "김동현"으로 수정.
   3)  홍길동 찾아서 삭제                                             => "안녕하세요. 입니다.";
   
   String str1 = "홍길동님!  안녕하세요. 홍길동입니다. 안녕~~ 안녕"; 
    
     // System.out.println( str1.contains("홍길동") );  // true
     // System.out.println( str1.replace("홍길동", "김동현") );
    
    System.out.println( str1.replace("홍길동", "") );
    System.out.println( str1.replaceFirst("홍길동", "XXX") );
    
    System.out.println( str1  );  // 불변
    
    /*
    1)  안녕 문자열 뒤에 (Hello) 문자열을  삽입(insert) =>  "안녕(Hello)하세요. 홍길동입니다."
    int idx =  str1.indexOf("안녕");
    System.out.println( idx );  //  0
    
    String s1 =  str1.substring(0, "안녕".length() ) ;
    String s2 =  str1.substring( "안녕".length() ) ;
    System.out.println(   s1.concat("(Hello)").concat(s2)  );
    
   //      
    String str1 = "안녕하세요. 홍길동입니다."; 
       String str2 = str1.replaceAll("안녕","안녕(Hello)");
       System.out.println(str2);       
           
    2)  홍길동을 찾아서 "김동현"으로 수정.
    3)  홍길동 찾아서 삭제                                             => "안녕하세요. 입니다.";
    */
    
    //  저 상황에서 replaceAll()이 아닌 그냥 replace()를 쓰면 안되나요?
    //   replaceAll(정규표현식,  바꿀문자열) ,  replace( CharSequence, String ) 차이점
 
   11:03 수업 시작~~ 
9. days01.Ex01.java  자바 파일을 읽어서 라인단위로 출력하는 코딩을 하세요.   

// E:\Class\SS18Class\Workspace\JavaClass\javaPro
   // days01.Ex01.java  자바 파일을 읽어서 라인단위로 출력하는 코딩을 하세요.   
   // [절대경로] / 상대경로
   // String fileName = "E:\\Class\\SS18Class\\Workspace\\JavaClass\\javaPro\\src\\days01\\Ex01.java";
   
   // E:\Class\SS18Class\Workspace\JavaClass\javaPro\\days01\\Ex01.java
   // 상대경로 기호 :    . 현재디렉토리       .. 상위디렉토리
   String fileName = ".\\src\\days01\\Ex01.java";
   
   // String dir = System.getProperty("user.dir")+"\\src\\days01";
   // String fileName = "Ex01.java"; 
   
   // try~with~resouces문 ( 이해 ) 
   try (
         FileReader fr = new FileReader( fileName );
         BufferedReader br = new BufferedReader(fr);
         ){
      
      String line = null;          
      while (   ( line =  br.readLine() )    != null  ) {
         System.out.printf("%s\n", line);
      } // while
      
   } catch (Exception e) {
      // java.io.FileNotFoundException: days01\Ex01.java (지정된 경로를 찾을 수 없습니다)
      System.out.println( e.toString() );
   }      
   

10. 
 String s = "[팀장]하동호(*), 박진용(*), 이혜진(*), 김수민, 신희민, 진예림, 박현주 (수요일)";
 문자열 s 에서 팀원명만 얻어와서..아래와 같이 실행되도록 코딩하세요. 
 
        실행결과)
<ol>
   <li>하동호</li>
   <li>박진용</li>
   <li>이혜진</li>
   <li>김수민</li>
   <li>신희민</li>
   <li>진예림</li>
   <li>박현주 </li>
</ol>


   String s = "[팀장]하동호(*), 박진용(*), 이혜진(*), 김수민, 신희민, 진예림, 박현주 (수요일)";
   
   String regex = "\\[팀장\\]|\\(\\*\\)|\\(.{3}\\)";
   s =  s.replaceAll(regex, "");
   System.out.println( s );
   String [] names =  s.split("\\s*,\\s*");
   
   // Math.random();
   // Random 클래스        
   StringJoiner   sj = new StringJoiner(
                      "</li>\r\n       <li>"
                    , " <ol>\r\n      <li>"
                    , "</li>\r\n    </ol>");      
   for (String name : names) {
      sj.add(name );
   }
   
   System.out.println( sj );
   
   // String.join()
   /*
   String result =  String.join("</li>\r\n       <li>", names);    
   System.out.println(    "  <ol>\r\n      <li>" +  result  +"</li>\r\n   </ol>");
   */
   
   
   
public class Ex02 {

   public static void main(String[] args) {
      // Property == 속성
      // E:\Class\SS18Class\Workspace\JavaClass\javaPro
      String dir =   System.getProperty("user.dir");
      System.out.println( dir );

   } // main

} // class

* @content    [문자열 관련 클래스들]
 *                         String  불변
 *                        1) StringBuffer  - 멀티 스레드 안전하지 않다.
 *                        2) StringBuilder  - 멀티 스레드 안전하다. ( == 즉, 동기화 처리가 되어져 있다. )
 *                         
 *                         StringTokenizer 
 */
public class Ex03 {

   public static void main(String[] args) {
      // (Hello) 문자열 삽입, 수정, 삭제, 추가 등등 문자열을 자주 변경해야된다면 String클래스를 사용하지 않는다.
      // StringBuffer, StringBuilder를 사용한다. 
      // ( 시험) 어떤 경우에 String 클래스 대신에 문자열을 StringBuffer, StringBuilder를 사용합니까? 
      String str1 = "안녕하세요. 홍길동입니다. ";
      // 1 위치의 문자를 '뇽' 수정
      
      
      
      StringBuffer sb = new StringBuffer(str1);     
      System.out.println( sb.toString() );      
      int offset =   sb.indexOf("안녕") + "안녕".length()  ;
      sb.insert(offset, "(Hello)");     
      System.out.println( sb );
      
      int start , end;
      start = sb.indexOf("홍길동");
      end = start + "홍길동".length();
      sb.replace(start, end, "김동현");
      // sb.replace(start, end, "");
      System.out.println(  sb );
      
      sb.delete(start, end);
      System.out.println(  sb );
      
      // 10                  00001010
      // sb.reverse();
      //System.out.println(sb  );
      
      sb.setCharAt(1, '뇽');
      System.out.println(sb  );
      
   } // main

} // class
* @content    [문자열 관련 클래스들]
 *                         String  불변
 *                        1) StringBuffer  - 멀티 스레드 안전하지 않다.
 *                        2) StringBuilder  - 멀티 스레드 안전하다. ( == 즉, 동기화 처리가 되어져 있다. )
 *                         
 *                         StringTokenizer 
 */
public class Ex03_02 {

   public static void main(String[] args) {
       
      String str1 = "안녕하세요. 홍길동입니다. "; 
      
      StringBuilder sb = new StringBuilder(str1);
      
      System.out.println( sb.toString() );      
      int offset =   sb.indexOf("안녕") + "안녕".length()  ;
      sb.insert(offset, "(Hello)");     
      System.out.println( sb );
      
      int start , end;
      start = sb.indexOf("홍길동");
      end = start + "홍길동".length();
      sb.replace(start, end, "김동현");
      // sb.replace(start, end, "");
      System.out.println(  sb );
      
      sb.delete(start, end);
      System.out.println(  sb );
      
      // 10                  00001010
      // sb.reverse();
      //System.out.println(sb  );
      
      sb.setCharAt(1, '뇽');
      System.out.println(sb  );
      
   } // main

} // class
public class Ex03_03 {

   public static void main(String[] args) {
      
      // long nano = System.nanoTime();
      // long mili = System.currentTimeMillis();
      
      // testString();      
      testStringBuffer();
   } // main
   
   // 속도 600배 차이나요.. 
   // > 처리 시간 :       10503300ns
   // > 처리 시간 : 6초114562099ns
      private static void testStringBuffer() {
         // START
         long start = System.nanoTime();       
         // String sb = "a";
         StringBuffer sb = new StringBuffer("a");
         for (int i = 0; i < 200000; i++) {
            // sb += "a";
            sb.append("a");
         }
         // END
         long end = System.nanoTime();     
         System.out.printf("> 처리 시간 : %dns\n", ( end - start ));
         
      }

   // > 처리 시간 : 6초114562099ns
   private static void testString() {
      // START
      long start = System.nanoTime();       
      String sb = "a";      
      for (int i = 0; i < 200000; i++) {
         sb += "a";
      }
      // END
      long end = System.nanoTime();     
      System.out.printf("> 처리 시간 : %dns\n", ( end - start ));
      
   }

} // class
public class Ex04 {

   public static void main(String[] args) {
      // 12:02 수업 시작~
      /*
      문제 설명
      길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.

      제한 조건
      n은 길이 10,000이하인 자연수입니다.
      입출력 예
      n  return
      3  "수박수"
      4  "수박수박"
      */
      
      String answer =  Solution.solution(4);
      System.out.println( answer );
       
   } // main

} // class

class Solution {
   public  static String solution(int n) {  // 5 
      
      StringBuffer answer = new StringBuffer();     
      int 몫 = n/2;
      int 나머지 = n%2;
        for (int i = 1; i <= 몫; i++)   answer.append("수박" ) ;        
        if(나머지 ==1 ) answer.append("수");
    
        return answer.toString();
    }
   
   /*
   public  static String solution(int n) {
      StringBuffer answer = new StringBuffer();     
        for (int i = 1; i <= n; i++) {
           if( i%2==1) answer.append("수" ) ;
           else answer.append("박" );
      }        
        return answer.toString();
    }
    */
   /*
    public  static String solution(int n) {
        String answer = "";        
        for (int i = 1; i <= n; i++) {
         // i 홀수  =  수 
           // i 짝수 =  박
           if( i%2==1) answer +="수";
           else answer +="박";
      }        
        return answer;
    }
    */
}
//수박수박수박수박수갑
public class Ex04 {

   public static void main(String[] args) {
      // 12:02 수업 시작~
      /*
      문제 설명
      길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.

      제한 조건
      n은 길이 10,000이하인 자연수입니다.
      입출력 예
      n  return
      3  "수박수"
      4  "수박수박"
      */
      
      String answer =  Solution.solution(4);
      System.out.println( answer );
       
   } // main

} // class

class Solution {
   public  static String solution(int n) {  // 5 
      
      StringBuffer answer = new StringBuffer();     
      int 몫 = n/2;
      int 나머지 = n%2;
        for (int i = 1; i <= 몫; i++)   answer.append("수박" ) ;        
        if(나머지 ==1 ) answer.append("수");
    
        return answer.toString();
    }
   
   /*
   public  static String solution(int n) {
      StringBuffer answer = new StringBuffer();     
        for (int i = 1; i <= n; i++) {
           if( i%2==1) answer.append("수" ) ;
           else answer.append("박" );
      }        
        return answer.toString();
    }
    */
   /*
    public  static String solution(int n) {
        String answer = "";        
        for (int i = 1; i <= n; i++) {
         // i 홀수  =  수 
           // i 짝수 =  박
           if( i%2==1) answer +="수";
           else answer +="박";
      }        
        return answer;
    }
    */
}
//수박수박수박수박수갑
public class Ex05 {

   public static void main(Strin
                           g[] args) {// 2:00 수업 시작~
      // StringTokenizer 클래스
      String str = "김지은,신희민,박민종,윤재민";
      // str.split(구분자 regex)
      StringTokenizer st = new StringTokenizer(str, ",");
      
      System.out.println( st.countTokens()  ); // 토큰  갯수
      
      /*
      String name =  st.nextToken();
      System.out.println( name );
      
      name =  st.nextToken();
      System.out.println( name );
      
      name =  st.nextToken();
      System.out.println( name );
      
      name =  st.nextToken();
      System.out.println( name );
      
      // 더 이상 가져올 토큰 이 없는 데... nextToken()
      // NoSuchElementException
      
      name =  st.nextToken();
      System.out.println( name );
      */
      
      while (  st.hasMoreTokens() ) {   // [true]/ false
         String name =  st.nextToken();
         System.out.println( name );
      } // 

      /*
       * 구분자를 가지고 잘라내기-> 토큰 
       * hasMoreTokens() 
       * nextToken()
       */
   } // main

} // class
public class Ex06 {

   public static void main(String[] args) {
      // 어제  클래스(OOP) 기본 개념 설명 ~
      // Object
      // String, StringBuffer, StringBuilder, StringTokenizer
      // [Math 클래스  ]
      //   -  모든 멤버들이 static 이다.
      //   -  수학 관련된 메서드 
      //   -   필드  2개
      out.println( PI );
      out.println( E );
      
      //  - 메서드 
      out.println(  random()  ); // 랜덤갓
      out.println(  max(2,4)  ); // 최대값
      out.println(  min(2,4)  ); // 최소값
      out.println(  pow(2,3)  ); // 누승           double
      out.println(  abs(-10)  ); // 절대값
      out.println(  sqrt(4) ); // double 2.0
      
      // 반올림, 올림(절상), 버림(절삭) *** 
      //                                                       소수점 첫 번째 자리에서 올림(절상)
      out.println(    ceil( 45.179 )   );  // 천장  == 올림   double
      out.println(    ceil( 45.779 )   );  // 천장  == 올림
      out.println(    ceil( 45.579 )   );  // 천장  == 올림
      
      out.println(    floor( 45.179 )   );  // 바닥  == 내림(절삭)  double
      out.println(    floor( 45.779 )   );  // 바닥  == 내림
      out.println(    floor( 45.579 )   );  // 바닥  == 내림

      out.println(    round( 45.179 )   );  // 반올림         int
      out.println(    round( 45.779 )   );  // 반올림         int
      out.println(    round( 45.579 )   );  // 반올림        int
      

      // [ StrictMath 클래스 ]
      // Math 클래스는 최대한 성능을 얻기 위해 JVM이 설치된 OS의 메서드를 호출해서 처리한다. 
      // OS 에 따라서 반올림 처리 방법이 다르다. -> OS 결과가 다르게 처리되기도 한다. 
      // 이런 단점을 없애기 위해 성능은 포기하는 대신 항상 같은 결과가 나오도록 만든 Math 클래스가
      //  StrictMath 클래스이다. 
   } // main

} // class
ublic class Ex06 {

   public static void main(String[] args) {
      // 어제  클래스(OOP) 기본 개념 설명 ~
      // Object
      // String, StringBuffer, StringBuilder, StringTokenizer
      // [Math 클래스  ]
      //   -  모든 멤버들이 static 이다.
      //   -  수학 관련된 메서드 
      //   -   필드  2개
      out.println( PI );
      out.println( E );
      
      //  - 메서드 
      out.println(  random()  ); // 랜덤갓
      out.println(  max(2,4)  ); // 최대값
      out.println(  min(2,4)  ); // 최소값
      out.println(  pow(2,3)  ); // 누승           double
      out.println(  abs(-10)  ); // 절대값
      out.println(  sqrt(4) ); // double 2.0
      
      // 반올림, 올림(절상), 버림(절삭) *** 
      //                                                       소수점 첫 번째 자리에서 올림(절상)
      out.println(    ceil( 45.179 )   );  // 천장  == 올림   double
      out.println(    ceil( 45.779 )   );  // 천장  == 올림
      out.println(    ceil( 45.579 )   );  // 천장  == 올림
      
      out.println(    floor( 45.179 )   );  // 바닥  == 내림(절삭)  double
      out.println(    floor( 45.779 )   );  // 바닥  == 내림
      out.println(    floor( 45.579 )   );  // 바닥  == 내림

      out.println(    round( 45.179 )   );  // 반올림         int
      out.println(    round( 45.779 )   );  // 반올림         int
      out.println(    round( 45.579 )   );  // 반올림        int
      

      // [ StrictMath 클래스 ]
      // Math 클래스는 최대한 성능을 얻기 위해 JVM이 설치된 OS의 메서드를 호출해서 처리한다. 
      // OS 에 따라서 반올림 처리 방법이 다르다. -> OS 결과가 다르게 처리되기도 한다. 
      // 이런 단점을 없애기 위해 성능은 포기하는 대신 항상 같은 결과가 나오도록 만든 Math 클래스가
      //  StrictMath 클래스이다. 
   } // main

} // class
public class Ex07 {

   public static void main(String[] args) {
      // [ 래퍼(Wrapper)클래스 ]
      // 기본형 8가지를 사용하기 쉽도록 객체화 시킨 클래스를 래퍼 클래스라고 한다. 
      // boolean -> Boolean
      // char                    -> Character
      // byte -> Byte
      // short -> Short
      // int                        -> Integer
      // long -> Long
      // float -> Float
      // double -> Double
      
      int i = 10;       
      // "100" -> int
      // Integer.parseInt("100");
      Integer j = new Integer("100");
      
      //Integer -> int 반환하는 메서드 
      int k =  j.intValue();
      long l =  j.longValue();
      
      System.out.println(  Integer.MAX_VALUE );
      System.out.println(  Integer.MIN_VALUE );
      
      
      Integer.parseInt("100", 2);  // 4
      Integer.parseInt("12", 8);     // 10
      
      /*
      상속 계층도
      Object
          ㄴ Boolean
          ㄴ Charater
          ㄴ Number  추상클래스
                  ㄴByte
                  ㄴShort
                  ㄴInteger
                  ㄴLong
                  ㄴFlat
                  ㄴDouble
                  
                  ㄴ BigInteger  클래스 
                  ㄴ BigDecimal 클래스
                  
      */            
      

   } // main

} // class

 

 

 * @subject      오토박싱 & 오토 언박싱( auto boxing && auto unboxing (
 * @content      오토 == 자동으로 형변환된다. 
 */
public class Ex08 {

   public static void main(String[] args) {
      
      int x = 100;
      // 클래스     기본형        형변환 X
      // 기본형 -> 자동 -> 래퍼클래스  객체로 형변환.               오토박싱(boxing)
      Integer y = x;   // jdk 1.5 이전에는 오류 나는 코딩. 
      int z =  y;
      
      System.out.println( z   );  // 100
      // 3:01 수업 시작~ 
      // 
      int n = 10;
      test( n );

   } // main

   // int -> Integer -> Object
   private static void test(  Object i ) {
       System.out.println(  i  );
       
       /*
       System.out.printf("이름은 :  ")
                           .printf("%s", "홍길동")
                           .printf("나이는 : %d", 20);
       */
   }

} // class

 

* @subject    java.util 패키지  - [ Arrays 클래스 ]
 * @content          유틸리티 -   자바에서 자주 사용되는 유용한 클래스를 가지고 있는 패키지.
 */
public class Ex09 {

   public static void main(String[] args) {
      //  int [] -> Integer [] 배열 변환.. 
      // int [] m = { 3,5,2,4,1 };
      Integer [] m = { 3,5,2,4,1 };     
      // Integer [] temp = new Integer[ m.length];
      
      Arrays.sort( m );  // 오름차순 정렬 ( [asc] ending )
      System.out.println( Arrays.toString( m )  );  // "[1, 2, 3, 4, 5]"
      // 내림차순 정렬해서 출력.
      
      /*
      Arrays.sort(  m ,   new Comparator<Integer>() { 
         @Override
         public int compare(Integer o1, Integer o2) { 
            return o2 - o1;
         }
      }  );
      */
      //                               람다식
      // Arrays.sort(  m ,   ( o1,  o2)  -> o2 - o1  );     
      // Arrays.sort(  m ,   ( o1,  o2)  -> o2.compareTo(o1)  );
      Arrays.sort(  m ,   Collections.reverseOrder()  );
      
      System.out.println( Arrays.toString( m )  ); 
      
      /*
      String temp =  Arrays.toString( m ).replaceAll("\\[|\\]", "");
      System.out.println(temp); //  "1, 2, 3, 4, 5"
      StringBuffer sb = new StringBuffer(temp);
      sb.reverse();
      System.out.println(sb );
      */    
      /*
      int [] temp = new int[m.length];
      
      for (int i = 0; i < m.length; i++) {
         temp[4-i] = m[i];
      }
      m = temp;
      System.out.println(  Arrays.toString( m ) );
      */
      
      
      /*
      // [하동호]
       * 람다와 스트림
      Integer[] m1 = ((IntStream) Arrays.stream(m)).boxed().toArray(Integer[]::new);
         Arrays.sort(m1,Collections.reverseOrder());
       // [김수민]  
         Integer [] m2 = Arrays.stream(m).boxed().toArray(Integer[]::new);
         Arrays.sort(m2, Collections.reverseOrder());
         System.out.println(Arrays.toString(m2));  
       // [윤재민]
       Integer [] m = { 3, 5, 2, 4, 1 };
                              T m
         Arrays.sort(m, Collections.reverseOrder());   
      */
      
    
      
      
      

   } // main

} // class
public class Ex10 {

   public static void main(String[] args) {
      // 
      int [] m = { 3,5,2,4,1 };
        System.out.println(    Arrays.binarySearch(m, 2)  );   // 2        
        Arrays.fill(m, -1);  // [-1, -1, -1, -1, -1]        
        System.out.println(   Arrays.toString(m)  );
        
        
        // Arrays.asList(null)
        // 배열 복사 : System.arraycopy(args, 0, m, 0, 0);
        

   } // main

} // class



* @subject   java.util 패키지 안에 자주 사용되는 유용한 클래스 
 * @content   1) Arrays 클래스 
 *                     2) Random 클래스
 *                          Math.random()
 *                     3)  Objects   클래스
 *                           ㄴ 모두가 static메서드 이다.  
 *                           ㄴ  객체를 비교할 때나 널 체크할 때 유용하다. 
 */
public class Ex11 {

   public static void main(String[] args) {
      // 4:05 수업 시작
      // Random rnd = new Random();
      // Random rnd = new Random(long seed);
      // -21억~ rnd.nextInt()  ~ 21억   임의의 정수
      // rnd.nextInt(45)  // 0 <=  정수 < 45
      // rnd.nextInt(2)
      // rnd.nextBoolean(); // 
      
      // [Objects 클래스 ]
      Point p1 = null; 
      test( p1 ); 

   } // main

   private static void test(Point p) {
      /*
       // p 가 널인지 여부 체크 
      //1) if (   p != null ) {
      if (    !Objects.isNull(p)  ) {   // 널   true,                   널이 아니면 false
      // 3)  if (    Objects.nonNull(p)  ) { // 널아니면 true       널이면 false
         // 
      }
      */
      
      Point p2 = new Point(1, 2);
      // if(  p != null  && p.equals(p2) ) {
      if(  Objects.equals(p, p2)  ) {          // ( 시험 ) 48라인 과 같은 코딩을 하세요.. 
         // 같은 좌표다.. 출력.. 코딩....
      } 
      
   }

} // class


class Point  implements Cloneable{  
   int x , y;
   
   Point(int x, int y){
      this.x = x;
      this.y = y;
   }
 
   @Override
   protected Point clone() {
      Object obj = null;    
      try {
         obj  = super.clone();
      } catch (CloneNotSupportedException e) { 
         e.printStackTrace();
      }     
      return  (Point)obj;
   }
 
   @Override
   public boolean equals(Object obj) {   
      if( obj instanceof Point  ) {
          Point p =  (Point)obj;
          if( this.x == p.x  && this.y == p.y)  return true;
      }
      
      return false;
   } 
   
}


 

 

public class Ex02 {

   public static void main(String[] args) {
      /*
       * 1. 정규표현식( Regular Expression ) == 정규식
       *    - 정의 ? 텍스트 데이터 중에서 원하는 조건(패턴, pattern)과 일치하는 문자열을 
       *                 찾아내기 위해 사용되는 것
       *                 미리 정의된  기호와 문자를 이용해서 작성한 문자열 패턴.  \\.  {2}  ?  [0-9]
       *     - 예) 비밀번호 : 숫자1, 알대1, 알소1, 특수문자1, 길이  8~15  
       *     - 자바는 정규표현식 관련 클래스 
       *        java.util.regex 패키지 안에 2개의 클래스가 있습니다.
       *                        ㄴ Pattern 클래스
       *                        ㄴ Matcher 클래스
       *         
       *     - boolean String.matches(String regex)              
       * */ 
      String [] data = {"bat","baby","bonus","cA","ca","co", "c.", "c0", "car"
                                 , "combat", "count", "date", "disc", "fx"};
      // [ 정규표현식을 설명하세요 ]
      // String regex = "c[a-z]*";
      // String regex = "c[a-z]";
      // String regex = "c[a-zA-Z]";
      // String regex = "c[a-zA-Z0-9]";
      // String regex = "c\\w";
      // String regex = ".*";
      // String regex = "c.";
      // String regex = "c\\.";   //    \\[   escape 제외시킨다.
      // String regex = "c[0-9]";    //  "c\\d"
      // String regex = "c.*t";   // c 모든문자*.......  t
      //String regex = "[b|c]";
      // String regex = "[bc]";
      // String regex = "[b-c].*";
      // String regex = "[^bc].*";
      
      // String regex = ".*a.*"; // 위치에 상관없이  a 가  1개  포함된 문자열
      
      //  [질문] 첫번째 문자   알파벳대소문자   bcd 제외한  뒤에는 상관없다...
      // String regex = "[^bcd].*";
      
      //String regex = "[a-zA-Z].*";
      // String regex = "[ae-zA-Z].*";
      String regex = "[a-zA-Z&&[^b-d]].*";
      
      
      /*
      for (int i = 0; i < data.length; i++) {
         // true / false  data[i].matches(regex)
      }
      */
      
      // 1. Pattern 객체 생성
      Pattern p = Pattern.compile(regex);
      // 2. matcher 객체 생성
      for (int i = 0; i < data.length; i++) {
         Matcher m = p.matcher(   data[i]   );
         if(    m.matches()  )  System.out.println( data[i] );
      } 
      
       
      
   } // main

} // class
 * @subject   java.util 패키지 + 클래스 
 * @content 
 */
public class Ex12 {

   public static void main(String[] args) {
      String fileName = "days20\\Ex01.java";
      
      // 절대경로 
      // E:\Class\SS18Class\Workspace\JavaClass\javaPro\src\days20\Ex01.java
      fileName  =  String.format("%s\\src\\%s"
                                                  ,  System.getProperty("user.dir")
                                                  , fileName );
      
      // System.out.println(  fileName );
      
      // 1. 읽어와서 출력. - 한 라인 읽어, 한 문자 단위
      //         ㄴ 배열 0~9  예제.  days13.Ex02.java   활용~
      // 2. 알파벳 대소문자 구분하지않고  A=23, B=22 갯수 파악 해서 출력.
      // 3. 막대그래프
      //   A(20) : ####################
      //   B(13) : ############ 
      int [] counts = new int[26];
      // 'A'   65          counts[0]
      char one = '\u0000';
      int code = 0;
      try (
            FileReader fr = new FileReader(fileName);
            ){
         while (       ( code =  fr.read() )      != -1            ) {
            one = (char) code;
            // System.out.println(  one  );
            one = Character.toUpperCase(one);
            if (    Character.isUpperCase(one)     ) {
               int index = one - 'A';
               counts[index]++;
            }  
         } // while
         
         //  막대그래프
          //    A(20) : ####################
         for (int i = 0; i < counts.length; i++) {
            System.out.printf(" %c(%d) : %s\n",
                                            i+'A',  counts[i], "#".repeat(counts[i])
                  );
         }
      } catch (Exception e) {
         System.out.println( e.toString() );
      }
      

   } // main

} // class
public class Ex13 {

   public static void main(String[] args) {
      // 정규표현식 정리 
      // BigInteger , BigDecimal 클래스
      
      
      // 자바 : 날짜.시간 다루는 클래스 + 형식화 클래스
      
    
       
      
   } // main

} // class
public class Ex03 {

   public static void main(String[] args) {
      // Object
      //     ㄴ Number
      //              ㄴ BigInteger : 정수 가장 큰 자료형 long(8) -900경~900경
      //                    과학적인 계산  long형보다 더 큰 정수값을 저장하고자 한다면 ? 
      //                    - String 자료형 처럼 불변... 
      //              ㄴ BigDecimal
      //                    - 실수 float(4), double(8)    정밀도 / 오차 있어요... 
      //                     - 오차가 없는 실수를 다루고자 할 때는 BigDecimal 자료형을 사용한다. 
      
      BigInteger  bi = new BigInteger("123123123123123123123213");
      bi = new BigInteger("EFEFEF12A", 16);  // String   , radix
      
      // 1 ->     BigInteger
      // bi =  BigInteger.valueOf(1L);
      System.out.println(    bi.toString()   );  // "64407662890"
      
      // int  +, -, * ,  /   , % 산술연산자
      bi.add(bi);
      bi.subtract(bi);
      bi.multiply(bi);
      bi.divide(bi);
      bi.remainder(bi);
       
      BigDecimal bd = new BigDecimal(3.14);
      bd.add(bd);
      

   } // main

} // class

 

 

 @subject   날짜(date), 시간(time)  + 형식화( formatting )
 * @content   컬렉션 프레임워크( 컬렉션 클래스 )
 *                      제네릭과 어노테이션
 *                      자바 IO(입출력)
 *                      ---------------
 *                      스레드 + 네트워크
 *                      람다식 + 스트림
 *                      
 */
public class Ex04 {

   public static void main(String[] args) {
      /*
       * 1. JDK 1.0 -  java.util.[Date 클래스] ,  - deprecated 메서드 
       * 2. JDK 1.1 -   java.util.Calendar 클래스
       *                                        ㄴ GregorianCalendar
       * 3. JDK 1.8 - java.time 패키지 안에 여러 하위 패키지 및 다양한 클래스 추가.   
       * */
      
      
      Date d = new Date();
      // Thu Feb 23 14:31:42 KST 2023         한국표준시
      System.out.println(  d.toString()  ); 
      System.out.println(  d  );
      System.out.println(  d.toGMTString()  );
      // GMT Greenwich Mean Time = 그리니치 평균 시간 == 세계 표준 시간.
      System.out.println(  d.toLocaleString()  );  // 2023. 2. 23. 오후 2:38:12
      
      // 년
      System.out.println(    d.getYear() + 1900   );
      // 월
      System.out.println(   d.getMonth() + 1 );
      // 일
      System.out.println(    d.getDate() );
      // 요일
      System.out.println(    d.getDay() );  // 목(4)
      System.out.println(   "일월화수목금토".charAt( d.getDay() ) +"요일" );  // 목(4)
      // 시간
      System.out.println(    d.getHours() );
      // 분
      System.out.println(    d.getMinutes() );
      // 초
      System.out.println(    d.getSeconds() );
      // 밀리세컨드  X
      

   } // main

} // class

 

public class Ex05 {

   public static void main(String[] args) {
      // 3:05 수업 시작~~~
      // [ 달력 ] 
      // 1)   2010 년,   5 월의 
      //                                    1일 무슨 요일 ? 
      // 2)                       몇일까지?  28/29/30/31
      //    2010.6.1  날짜 객체  - 1일 = 2010.5.마지막날짜를 가진 객체 => getDate() 일 
      Date d = new Date(2010-1900, 6-1, 1); //  2010.6.1  날짜 객체
      int date =  d.getDate(); // 1일
      d.setDate( date - 1 );
      System.out.println( d.toLocaleString() );  // 2010. 5. 31. 오전 12:00:00
      System.out.println(  d.getDate()  ); 
      
      
      // 2010.5.1  Date 날짜 객체 생성 + getDay() 메서드 0(일) ~6(토)
      // (1) Date 생성자
      /*
      Date d = new Date( 2010 - 1900 , 5-1, 1);
      System.out.println(    "일월화수목금토".charAt(   d.getDay()   )      );
      */
      // (2) 년,월,일,시,분,초 설정...   setXXX()
      /*
      Date d = new Date();
      d.setYear(2010 - 1900);
      d.setMonth(5-1);
      d.setDate(1);
      // 시,분,초  설정하지 않아도 무관~~ 
      d.setHours(0);
      d.setMinutes(0);
      d.setSeconds(0);
      System.out.println(  d.toLocaleString()  );
      */

   } // main

} // class

 

 

public class Ex06 {

   public static void main(String[] args) {
      // [문제]
      // 주민등록번호     앞자리 6자리   "890211-1" // 1900년대
      // 생일 지났는지/ 지나지 않았는지 여부를 체크 하는 코딩... ...
      /*
       *  본인 코딩.. 주석 처리
       */
      // 생일의     년도 X,         월,일
      // 오늘날짜   년도X           월,일
      // 4:03 수업 시작~~~ 
      String  rrn  = "890211-1";
      
      Date d = new Date();    // 2023. 2. 23.           오후 3:39:23
      d.setHours(0);
      d.setMinutes(0);
      d.setSeconds(0);    
      
      System.out.println( "오늘 날짜 : " +  d.toLocaleString() ); 
      System.out.println( "오늘 날짜 : " +  d.getTime() );   // long
      
      Date b_day = new Date(2023-1900, 2-1, 23) ;   // 00:00:00
      //System.out.println( b_day);
      System.out.println( "생일 날짜 : " +  b_day.toLocaleString() ); 
      System.out.println( "생일 날짜 : " +  b_day.getTime() );   // long
      
      // 밀리세컨드 : 0 설정.  X  
      
      
      System.out.println(   d.after(b_day)  );
      System.out.println(   d.before(b_day)  );
      System.out.println(   d.equals(b_day)  );
      
      /*
       * 
      d.after(b_day); // true, false   이것이 참이면 생일 지난것
      d.before(b_day); // 생일이 지나지 않은 것
      d.equals(b_day);  //  오늘 생일
      */
      
      
      /* 두 번째
      int b_md = Integer.parseInt(    rrn.substring(2, 6)    );  // 211
      
      Date d = new Date();
      int t_month = d.getMonth() + 1;
      int t_date =  d.getDate(); 
      int t_md = t_month * 100 + t_date;                                   // 223
      */
      
      /* 첫 번째.
      int b_month = Integer.parseInt(    rrn.substring(2, 4)    );  // 2
      int b_date = Integer.parseInt(    rrn.substring(4, 6)    );     // 11
      
      Date d = new Date();
      int t_month = d.getMonth() + 1;
      int t_date =  d.getDate(); 
      
      // b_month == t_month  && b_date == t_date   오늘이 생일날.
      // b_month  <= t_month  && b_date > t_date     생일 지난것.
      // 그 외는                                                                   생일 안 지난 것.
       * */

   }  // main

} // class
public class Ex07 {

   public static void main(String[] args) {
      
      // JDK 1.1 Calendar 추상클래스 - 날짜, 시간 
      // Calendar c = new Calendar();  X
      
      // GregorianCalendar   c = new GregorianCalendar();
      // true/false    c.isLeapYear(2010)
      
      // GregorianCalendar
      // BuddhistCalenader - 태국

      Calendar c = Calendar.getInstance();
      System.out.println(   c  );
      // java.util.GregorianCalendar[time=1677136849149
      // ,areFieldsSet=true
      // ,areAllFieldsSet=true,lenient=true
      // 시간대 ,zone=sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=30,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2023,MONTH=1,WEEK_OF_YEAR=8,WEEK_OF_MONTH=4,DAY_OF_MONTH=23,DAY_OF_YEAR=54,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=4,HOUR_OF_DAY=16,MINUTE=20,SECOND=49,MILLISECOND=149,ZONE_OFFSET=32400000,DST_OFFSET=0]
      
      // 년
      // c.get(int field)   정보를 얻어올 때.. 메서드
      // c.set()   날짜,시간 정보를 설정  메서드
      System.out.println(   c.get( Calendar.YEAR  )  );  // 2023
      // 월
      System.out.println(   c.get( Calendar.MONTH  ) + 1  );  // 1      ( 2월)
      // 일
      System.out.println(   c.get( Calendar.DATE  )  ); 
      System.out.println(   c.get( Calendar.DAY_OF_MONTH  )  ); 
      // 시간
      System.out.println(   c.get( Calendar.HOUR  )  );   // 12시간 ( 0~11 )
      System.out.println(   c.get( Calendar.HOUR_OF_DAY  )  );    // 24시간 ( 0~23 )
      // 분
      System.out.println(   c.get( Calendar.MINUTE  )  ); 
      // 초
      System.out.println(   c.get( Calendar.SECOND  )  ); 
      // 밀리세컨드 
      System.out.println(   c.get( Calendar.MILLISECOND  )  ); 
      // 요일
      // Date 클래스        :   0(일) 1(월)~ 6(토)
      // Calendar 클래스 :   1(일), 2(월)~ 7(토)
      System.out.println(   c.get( Calendar.DAY_OF_WEEK  )  );
      
      System.out.println(   c.get( Calendar.AM )  );           // 오전, 오후    1
      System.out.println(   c.get( Calendar.AM_PM )  );   // 오전, 오후    1
            
      System.out.println(   c.get( Calendar.WEEK_OF_MONTH )  );   // 해당 월의 몇 번째 주
      System.out.println(   c.get( Calendar.WEEK_OF_YEAR      )  );   // 해당 년도의 몇 번째 주
      
      
      // 일
      System.out.println(   c.get( Calendar.DATE  )  ); 
      System.out.println(   c.get( Calendar.DAY_OF_MONTH  )  );  // 해당 월의 몇일째냐? 
      System.out.println(   c.get( Calendar.DAY_OF_YEAR  )  );      // 해당 년도의 몇일째냐? 
      
   } // main

} // class

 

public class Ex07_02 {

   public static void main(String[] args) {
      // [문제] java.util.Calendar 클래스를 사용해서 2010.5.1  무슨요일 ?   토
      //                                                                             마지막날짜 ?    
      // 4:48 + 10 + 5
      // 5:05 수업 시작( 풀이)
      
      /*
      Calendar c = Calendar.getInstance();  // 현재 시스템의 날짜,시간 정보를 가지는 객체  c 
      // c.get(int field)
       
      c.set( Calendar.YEAR, 2010 );
      c.set( Calendar.MONTH, 5 -1 );
      c.set( Calendar.DATE, 1 );
       
      c.set(2010, 5-1, 1);      
      System.out.println(  c.get(Calendar.DAY_OF_WEEK ) ); // 7(토)
      */
      
    
      Calendar c   = new GregorianCalendar(2010, 5-1, 1);    
      System.out.println(  c.get(Calendar.DAY_OF_WEEK ) ); // 7(토
     
      // 마지막날짜..
      // Date   2010.6.1          -1    =>   2010.5.31
      /*
      Calendar c   = new GregorianCalendar(2010, 6-1, 1);
      c.add( Calendar.DATE  , -1);
      System.out.println(   c.get(Calendar.DATE)   ); // 31
      */
      
      int lastDay = c.getActualMaximum(Calendar.DATE);
      System.out.println( lastDay);
      
      

   } // main

} // class
public class review{


    public static void main(String[] args) {

        int year;
        try {
            (Scanner scanner = new Scanner(System.in)){

            }
        }
    }
}

 

'-java spring notes- > JAVA' 카테고리의 다른 글

list 배열, for문,vo  (0) 2023.09.18
DAY 25-컬렉션 클래스  (0) 2023.03.19
Day19 - 예외  (0) 2023.03.10
day18-객체+예외처  (0) 2023.03.06
객체 복습-day15~day18(자바의정석 기초 객체1+참고소스 복습~this)  (1) 2023.02.21
profile

냥코딩쟝

@yejang

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!