공부/Java

Java 기초, 유용한 class 및 method

snn.il 2022. 2. 10. 20:47

1. Scanner class

  • java.util 에서 제공하는 class
  • 주로 입력(System.in, 자바 표준 입력 스트림)을 받을 때 사용됨 ()
  • 입력되는 키 값을 공백으로 구분하는 토큰 단위로 읽음 (공백 : '','\n','\t', ... )
  • 사용자가 원하는 크기로 자르고 원하는 타입으로 읽을 수 있음

 

주요 method

  • String next() : 다음 토큰(공백을 기준으로 판단)을 String type으로 return
  • String nextLine() : 말 그대로 입력된 한 줄('\n' 제외)을 String type으로 return 
  • boolean hasNext() : 입력되는 토큰이 존재하면 true return, 입력이 없다면 무한정 기다림. ctrl+z로 입력 종료(false)
  • int nextInt() : 다음 토큰(공백을 기준으로 판단)을 int type으로 return
  • long nextLong() :  다음 토큰(공백을 기준으로 판단)을 int type으로 return
  • float nextFloat() : 다음 토큰(공백을 기준으로 판단)을 float type으로 return
  • double nextDouble(): 다음 토큰(공백을 기준으로 판단)을 double type으로 return

 

예시 (주로 사용하는 것들 위주로!)

import java.util.Scanner;

public class Main{
	public static void main(String[] args){
    
        Scanner sc = new Scanner(System.in); //여타 다른 class들과 마찬가지로 new를 통해 인스턴스 할당

        int first = sc.nextInt(); // token을 기준으로 int type을 받아옴
        float second = sc.nextFloat(); // token을 기준으로 float type을 받아옴
        String third = sc.next(); // token을 기준으로 String type을 받아옴
        String fourth = sc.nextLine(); // '\n'을 기준으로 String type을 받아옴

        System.out.println("first: "+first);
        System.out.println("second: "+second);
        System.out.println("third: "+third);
        System.out.println("fourth: "+fourth);
        
    }
}

[Input]

2839 22.234
class Scanner

 

[Output]

first: 2839
second: 22.234
third: class
fourth:  Scanner

 

%(주의) 여기서 nextLine() method는 만약 class치고 space 없이 그냥 엔터로 쳤다면 '\n'를 인식하고 반환값이 없어짐!

 

 

2. String.charAt(idx) method

  • Scanner와 함께 자주 사용됨 (Scanner를 통해 char type을 바로 받을 수 없기에. nextChar()는 없음)
  • String type이 아닌 char type을 사용해야 될 경우 이용
  • 혹은 입력 받은 String에서 원하는 index의 글자를 사용하고 싶을 때 이용
  • Scanner를 통해 입력받은 String type을 char type으로 변환해줄 수 있는 method
  • 입력받은 String 에서 지정된 index의 글자를 char type으로 반환

 

예시

import java.util.Scanner;

public class Main{
	public static void main(String[] args){
    
        Scanner sc = new Scanner(System.in); //여타 다른 class들과 마찬가지로 new를 통해 인스턴스 할당

        String str = sc.next(); // 일반적인 문자열
        String to_char = sc.next(); // 그냥 문자만 받고 싶은 문자열
        
        char str_c = str.charAt(3); // 3번째 index의 char 반환
        char to_c = to_char.charAt(0); // 0번째, 즉 문자열의 그 문자 자체를 반환

        System.out.println("String1: "+str);
        System.out.println("Char1: "+str_c);
        System.out.println("String2: "+to_char);
        System.out.println("Char2: "+to_c);
        
    }
}

[Input]

string c

 

[Output]

String1: string
Char1: i
String2: c
Char2: c

 

 

3. StringTokenizer class

  • java.util 에서 제공하는 class
  • String을 사용자가 지정한 구분자로 String을 쪼개주는 class
  • Scanner와 같은 의미의 Token사용
  • Scanner와 다르게 공백이 아닌 사용자가 직접 구분자 설정 가능
  • 생성자를 통한 인스턴스 할당: new StringTokenizer( 문자열 , 구분자)

 

주요 method

  • boolean hasMoreTokens() : 남은 토큰이 있는지 확인. 있으면 true반환, 없으면 false 반환
  • String nextToken() : 구분자로 나누어진 다음 토큰을 String type으로 반환 (Scanner와 유사)

 

예시

import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        String str = sc.next(); // Scanner를 통해 문자열 받아줌
        
        StringTokenizer st = new StringTokenizer(str, "."); // 구분자 "."를 기준으로 문자열을 나눔
        while(st.hasMoreTokens()){ // 토큰이 남아있는 동안
            System.out.println(st.nextToken()); // 해당 토큰을 출력
        }

    }
}

[Input]

2022.02.10

 

[Output]

2022
02
10

 

 

4. String.split(regex) method

  • StringTokenizer class와 유사하게 문자열을 나눌 때 사용
  • regex(정규표현식) 혹은 특정 문자를 기준으로 문자열을 분리하여 Array로 return

 

예시

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        String str = sc.next();
        String[] arr = str.split("\\."); // regex(정규표현식)이므로 .을 사용할 때는 \\사용 필수


        for(int i = 0; i< arr.length; i++){
            System.out.println(arr[i]);
        }

    }
}

[Input]

2022.02.10

 

[Output]

2022
02
10

 

%(주의) 출력이 같아보이지만 StringTokenizer의 nextToken()과는 다르게 String이 아닌 String Array로 반환하는 것 유의!

 

 

5. String.substring(strat idx, end idx) method

  • 이 또한 문자열을 분리하고 싶을 때 혹은 잘라오고 싶을 때 자주 사용되는 method
  • 시작 인덱스와 마지막 인덱스(실제로는 마지막 인덱스 - 1 까지 포함)를 지정하여 해당 문자열을 잘라와 String type으로 return
  • 마지막 인덱스를 설정하지 않는다면 시작 인덱스부터 문자열의 끝까지 잘라옴

 

예시

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        String str = sc.next();
        String first = str.substring(0,4); // idx 0 ~ idx 3 String
        String second = str.substring(5,7); // idx 5 ~ idx 7 String
        String third = str.substring(8); // idx 8 ~ idx end String

        System.out.println(first);
        System.out.println(second);
        System.out.println(third);

    }
}

[Input]

2022.02.10

 

[Output]

2022
02
10

 

%(주의) substring은 위의 예시와 같이 문자열을 분리하는 데에 사용하기 보다는 문자열의 일부를 가져오는데에 주로 사용됨.

 

 

6. String.format() method

  • 원하는 형식의 문자열로 String을 저장하는 방법
  • 기존의 서식 지정자를 이용하여 원하는 형식으로 저장하고 싶을 때 이용

 

예시

public class Main {
    public static void main(String[] args) {

       String str = String.format("%.2f", 3.237771);
       System.out.println(str);

    }
}

[Output]

3.24

 

 

7. Integer.parseInt( string , radix) method

  • 위에서 봤던 charAt()과 유사하게 String을 Integer(int) type으로 변환해주는 method
  • radix(기수)를 적지 않으면 string을 10진법으로 해석하여 int type으로 반환
  • radix를 적으면 string을 해당 진법으로 해석하여 그 진법을 다시 10진법으로 변환 후 int type으로 반환

 

예시

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in); //여타 다른 class들과 마찬가지로 new를 통해 인스턴스 할당

        // 입력된 시간을 초로 변환하는 문제라고 가정
        String str = sc.nextLine();
        String[] time = str.split(":"); // 시간을 각각 시,분,초로분리
        int hour = Integer.parseInt(time[0]); //String to Integer
        int min = Integer.parseInt(time[1]); //String to Integer
        int sec = Integer.parseInt(time[2]); //String to Integer
        int total_sec = hour * 360 + min * 60 + sec;
        System.out.println("총 시간: " + total_sec + "(sec)");
        
    }
}

[Input]

23:53:23

 

[Output]

총 시간: 11483(sec)