[Day21] Java 21 [9/6]
1. ํ์ผ ์ฝ์ด์์ ์ฒดํฌํ๊ธฐ
[๋ฌธ์ ] SS17 ํ์๋ช ๋จtxt ํ์ผ์ ์ฝ์ด์ ๊น, ์ด ํ์์ ๋ช ๋จ๋ง ์ถ๋ ฅ
String fileName = "./src/days21/SS17แแ
กแจแแ
ขแผแแ
งแผแแ
กแซ.txt";
try (
FileReader fr = new FileReader(fileName);
BufferedReader br = new BufferedReader(fr);
){
String name = null;
int lineNumber = 1;
while( ( name = br.readLine()) != null ) {
//String ์ฑ = name.charAt(0)+""; // "๊น" "์ด" "๋ฐ"
//char ์ฑ = name.charAt(0);
//if( ์ฑ == '๊น' || ์ฑ == '์ด' ) {
// if( ์ฑ.equals("๊น") || ์ฑ.equals("์ด") ) {
// 128๊ฐ ์ฑ
// ๊น, ์ด, ๋ฐ, ์ต, ํ
// if( name.startsWith("๊น") || name.startsWith("์ด") ) {
//String regex = "์ด|๊น|๋ฐ|์ต|๋ฌธ";
//String regex = "[์ด๊น๋ฐ์ต๋ฌธ]";
// if( ์ฑ.matches(regex) ) {
// ์ด๋ฏผ
// ์ดX๋ฏผ
// ์ดXXXXX๋ฏผ
//String regex = "[^์ด๊น].+";
String regex = "^์ด.*๋ฏผ$";
if( name.matches(regex) ) {
System.out.printf("%d : %s\n", lineNumber++, name);
}
// ํ์ฅ - ์นดํก 1/1/ 2X
} // while
} catch (Exception e) {
e.printStackTrace();
}
*** try-with-resources
public static void main(String args[]) throws IOException {
FileInputStream is = null;
BufferedInputStream bis = null;
try {
is = new FileInputStream("file.txt");
bis = new BufferedInputStream(is);
int data = -1;
while((data = bis.read()) != -1){
System.out.print((char) data);
}
} finally {
// close resources
if (is != null) is.close();
if (bis != null) bis.close();
}
}
-> finally ๊ตฌ๋ฌธ์ผ๋ก ํญ์ ํ์ผ์ ๋ซ์์ผํ๋ ๊ท์ฐฎ์์ด ์์๋ค.
public static void main(String args[]) {
try (
FileInputStream is = new FileInputStream("file.txt");
BufferedInputStream bis = new BufferedInputStream(is)
) {
int data = -1;
while ((data = bis.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
->try ( ์ ์ธ ๋ฐ ์ด๊ณ ๋ซ์๊น์ง ๋์์ ๊ฐ๋ฅ!!!)
2. Math ํด๋์ค
๊ธฐ๋ณธ์ ์ธ ์ํ๊ณ์ฐ์ ์ ์ฉํ ๋ฉ์๋
System.out.println( Math.PI );
System.out.println( Math.E );
System.out.println( Math.random() );
System.out.println( Math.max(3,1) );
System.out.println( Math.min(3,1) );
System.out.println( Math.pow(2,3) ); // ์ ๊ณฑ
System.out.println( Math.abs(-10) );
System.out.println( Math.sqrt(2) ); // ๋ฃจํธ
// *** ๋ฐ์ฌ๋ฆผ, ์ฌ๋ฆผ, ์ ์ญ ๋ฉ์๋ ( ์ํ )
// ๋ฉ์๋ 3๊ฐ์ง : 1) ๊ธฐ๋ฅ 2) ๋งค๊ฐ๋ณ์ 3) ๋ฆฌํด๊ฐ(๋ฆฌํด์๋ฃํ)
System.out.println( Math.round(45.179) ); // ์์์ ์ฒซ ๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ long
// Type mismatch: cannot convert from long to int
// long round(double) ์ค๋ฒ๋ก๋ฉ
// int round(float) ์ค๋ฒ๋ก๋ฉ
// int result = Math.round(45.779f) ; // ์์์ ์ฒซ ๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ long , float
System.out.println( Math.ceil(45.179) ); // 46.0 ์์์ ์ฒซ ๋ฒ์งธ ์๋ฆฌ์์ ์ฌ๋ฆผ double
// ์ ์ญ
System.out.println( Math.floor(45.999) ); // 45.0 ์์์ ์ฒซ ๋ฒ์งธ ์๋ฆฌ์์ ์ ์ญ(๋ฒ๋ฆผ) double
ํ์ํ ํด๋์ค ์ฌ์ฉํ์ง ์๊ณ ๊ตฌํ
// [Math.round()] / ceil() / floor()
double d = 45.17986;
// ์์์ 3์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ 45.18
// System.out.println(Math.round(d*100)/100D );
String sd = String.format ("%.2f" , d); // "45.18" -> double
d = Double.parseDouble(sd);
System.out.println( d ); // 45.18
double money = 9123456.78; // 9,123,456.78
System.out.printf("%,.2f", money);
// %[ai][f][w].[p]c
// % , .2f
// ํ์ํ ํด๋์ค X
* ํฌ๋งทํ
%[1$][flag][width].[precision] conversion
๋งค๊ฐ๋ณ์ ์ธ๋ฑ์ค / , ) / ์๋ฆฌ์ / ์์์ / ์ปจ๋ฒ์ (%f,%d,%c)
3. ์์ธ๋ฅผ ๋ฐ์์ํค๋ ๋ฉ์๋
- ๋ฉ์๋ ์ด๋ฆ์ "Exact" ๋ฌธ์์ด์ด ํฌํจ๋ ๋ฉ์๋
- jdk1.8 ์๋ก ์ถ๊ฐ
- ์ฐ์ฐ ์ค๋ฒํ๋ก์ฐ ( overflow ) ๋ฐ์ํ๋ ๊ฒ์ ๊ฐ์งํ๊ธฐ ์ํด์ ๋ง๋ค์ด์ง
์ฐ์ ์ค๋ฒํ๋ก์ฐ
int i = Integer.MAX_VALUE;
int j = 100;
int k = i + j;
System.out.println( k ); // -2147483549 ์ฐ์ ์ค๋ฒํ๋ก์
- Exact ๋ฉ์๋
๊ฐ์งํด์ ์์ธ๋ฅผ ๋ฐ์์ํค๋๋ก ํ๋ ๊ฒ์ด ๋์ฑ ์ข์ ์ฝ๋ฉ
int i = Integer.MAX_VALUE;
int j = 100;
int k = Math.addExact(i, j); // java.lang.ArithmeticException: integer overflow
// Math.subtractExact(j, k)
// Math.multiplyExact(j, k)
// Math.incrementExact(k)
// ๋ฑ๋ฑ ~~~Exact() ๋ฉ์๋
System.out.println( k );
- StrcitMath ํด๋์ค (p.489)
[Math ํด๋์ค]๋ ์ต๋ํ ์ฑ๋ฅ์ ์ป๊ธฐ ์ํด์ JVM์ด ์ค์น๋ OS์ ๋ฉ์๋(API)๋ฅผ ์ฌ์ฉํ๋ค.
OS ๋ง๋ค ๋ถ๋์์์ ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ ๋ค๋ฅด๋ค.
๊ฒฐ๊ณผ๊ฐ์ด ๋ค๋ฅด๊ฒ ๋์ฌ ์ ๊ฐ ์๋ค.
์ฑ๋ฅ์ ๋ค์ ํฌ๊ธฐํ๋๋ผ๋ ์ฐจ์ด๋ฅผ ์์ ๊ธฐ ์ํด ๋ง๋ค์ด์ง ํด๋์ค StrictMath ํด๋์ค
4. Wrapper ํด๋์ค, Numberํด๋์ค, ์คํ ๋ฐ์ฑ/์ธ๋ฐ์ฑ
1) Wrapper ํด๋์ค
๊ธฐ๋ณธํ ๋ํผํด๋์ค
boolean Boolean
byte Byte
short Short
char Character
int Integer
long Long
float Float
double Double
2) Number ํด๋์ค
1. ์ถ์ํด๋์ค
2. ์ซ์๋ฅผ ํ๋๋ก ๊ฐ๋ ๋ํผ ํด๋์ค์ ๋ถ๋ชจํด๋์ค์ด๋ค.
3. BigInteger ํด๋์ค : long ์ ์ ๋ ํฐ ์ ์๋ฅผ ๋ค๋ฃจ๊ณ ์ํ ๋ ์ฌ์ฉํ๋ ์๋ฃํ
BigDecimal ํด๋์ค : double ์ค์ ๋ ํฐ ์ค์(๋ถ๋์์ฃผ์ ) ๋ฅผ ๋ค๋ฃจ๊ณ ์ ํ ๋
3) ์คํ ๋ฐ์ฑ / ์คํ ์ธ๋ฐ์ฑ
public static void main(String[] args) {
// ์คํ ๋ฐ์ฑ & ์คํ ์ธ๋ฐ์ฑ( auto boxing && auto unboxing )
int i = 10; // ๊ธฐ๋ณธํ
//Integer j = new Integer(10); // ์ฐธ์กฐํ
// System.out.println( j.intValue() ); // 10
//์๋ (๊ธฐ๋ณธํ -> ๋ํผํด๋์ค )ํ๋ณํ == ์คํ ๋ฐ์ฑ
Integer j = i;
System.out.println( j );
//์๋ (๋ํผํด๋์ค -> ๊ธฐ๋ณธํ )ํ๋ณํ == ์คํ ์ธ๋ฐ์ฑ
int k = j;
System.out.println( k);
// ์ ๋ค๋ฆญ~
//ArrayList<int> list = new ArrayList<>(); X ( ์๊ธฐ )
// ArrayList<Integer> list = new ArrayList<>(); O
test(10); // int -> Integer -> Object
test(true); // boolean -> Boolean -> Object
test('a');
test(3.14);
test(new Regular());
// System.out.printf(String format, Object...args);
} // main
private static void test(Object o) {
}
* ์ ๋ค๋ฆญ (ArrayList<Integer>) ์ Wrapper ํด๋์ค๋ก๋ง ์ ์ธํด์ผํ๋ค!
* ๊ธฐ๋ณธํ ๊ฐ์ด Wrapperํด๋์ค๋ก ํ๋ณํ๋๊ณ ๋์ Object ๋งค๊ฐ๋ณ์๋ก ๋ค์ด๊ฐ๋ ๊ฒ
5. Arrays ์ ์ฉํ ๋ฉ์๋
Integer [] m = { 3,5,2,4,1 };
// 1) ๋ฐฐ์ด ํ์ธ
System.out.println( Arrays.toString( m ) ); // [3, 5, 2, 4, 1]
// 2) ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ -1๋ก ์ด๊ธฐํ
Arrays.fill(m, -1);
System.out.println( Arrays.toString( m ) ); // [-1, -1, -1, -1, -1]
// 3) ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์(asc)์ ๋ ฌ
Arrays.sort(m);
System.out.println( Arrays.toString( m ) ); // [1, 2, 3, 4, 5]
// 4) ๋ฐฐ์ด์ ๋ด๋ฆผ์ฐจ์(desc)์ ๋ ฌ
Arrays.sort(m);
int [] temp = new int[ m.length ];
for (int i = 0; i < temp.length; i++) {
temp[m.length-1-i] = m[i];
}
m = temp;
System.out.println( Arrays.toString( m ) );
๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ๋ฒ
// 1) ๊ธฐ๋ณธ
Arrays.sort(m, Collections.reverseOrder()); // ๋ฐํ๊ฐ Comparator (๊ตฌํ->)
// 2) Comparator ๊ตฌํ
Arrays.sort( m, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// return o1 - o2; ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
return o2 - o1; // ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
}
} );
// 3)-> ๋๋ค ์ฐ์ฐ์
Arrays.sort( m, ( o1, o2 ) -> o2 - o1 );
System.out.println( Arrays.toString( m ) );
5. ์ํ๋ฒณ ๊ฐ์ ํ์
[๋ฌธ์ ] days21.Ex01.java ํ์ผ ์ฝ๊ธฐ -> ๋๋ฌธ์ a~z ์ํ๋ฒณ ๊ฐฏ์ ํ์
( ๋์ ๋ฌธ์ ๊ตฌ๋ถ X )
ex)
a ########## 10
b #################### 20
z ############# 13
public static void main(String[] args) {
String fileName = ".\\src\\days21\\Ex01.java";
int [] counters = new int[26];
// 'a''A' - 65=> counters[0] A(65) -> 0
// 'z''Z' - 65 => countes[25] Z(90)
// ํ๋ฌธ์-65 == ๋ฐฐ์ด์ ์ ์ฅํ ์์น(index)
// [1, 17, 25, 5, 16, 4, 0, 0, 2, 5, 0, 1, 1, 9, 11, 5, 0, 15, 62, 1, 0, 0, 4, 3, 0, 0]
// [143, 28, 75, 49, 210, 59, 57, 9, 141, 21, 8, 78, 33, 166, 60, 57, 0, 199, 196, 169, 48, 19, 26, 26, 19, 0]
try (
FileReader fr = new FileReader(fileName); // ์ํ๋ฒณ, ํ๊ธ 1๋ฌธ์
){
int code = -1;
while( ( code = fr.read()) != -1 ) {
// System.out.printf( "%d - %c \n", code, code );
// ์๋ฌธ์ -> ๋๋ฌธ์ ๋ณํ
// " ๊ฐ๋
์ฑ์ด ์ข๊ธฐ์ ๋ ์ข์ ์ฝ๋ฉ์ด๋ผ ์๊ฐ๋๋ค. "
code = Character.toUpperCase( code );
if(Character.isUpperCase(code) ) {
counters[ code - 65 ]++;
}
/*
if( 'A' <= code && code <= 'Z' ) {
counters[ code - 65 ]++;
} else if( 'a' <= code && code <= 'z' ) {
counters[ code - 97 ]++;
}
*/
} // while
System.out.println( Arrays.toString( counters ) );
// ๋ง๋ ๊ทธ๋ํ ๊ทธ๋ฆฌ๊ธฐ.
for (int i = 0; i < counters.length; i++) {
// 'a' "##########" 10
System.out.printf("\'%c\' %s (%d)\n", i+65 , printBar('#', counters[i]) , counters[i]);
}
} catch (Exception e) {
e.printStackTrace();
}
} // main
private static Object printBar(char style, int length) {
// String X
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
sb.append(style);
}
return sb.toString();
}
์ต๊ทผ๋๊ธ