[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();
	}
  • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
  • ๋„ค์ด๋ฒ„ ๋ฐด๋“œ์— ๊ณต์œ ํ•˜๊ธฐ
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
  • ์นด์นด์˜ค์Šคํ† ๋ฆฌ ๊ณต์œ ํ•˜๊ธฐ