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 |