본문 바로가기

bitcamp/면접족보

면접족보 20/12/08_String 클래스의 메소드

1. String 클래스의 concat 메소드와 원리에 대해 설명하시오. 

Concat이란? 문자열과 문자열을 연결해주는 메소드이며, +연산자를 이용하는 경우 컴파일러에 의해 concat 메소드가 이용된다.

 · ex)

문자열 + 숫자가 연산되는 과정에서 호출되는 함수의 원리는?

 · 문자열과 숫자를 연산했을 때, 숫자는 valueOf 함수와 concat 함수를 통해 컴파일되어 문자열로 자동 변환된다.

 · ex)

 

 

2. String 클래스의 substring 메소드에 대하여 설명하시오.

· substring 메소드는 해당되는 문자열을 반환시키며, 인자값을 한 개 혹은 두 개를 받는 형태로 사용이 가능하다.

· substring(n): 입력된 숫자(n)을 index 기준으로 그 이후의 문자열을 반환한다.

· substring(n1, n2): 입력된 숫자(n1)을 index 기준으로 시작하여 (n2-1)까지의 문자열을 반환한다.

 

 

3. String 클래스의 compareTo 메소드에 대하여 설명하시오.

· compareTo 메소드는 두 개의 문자열을 비교하고 정수값을 리턴한다.(대소문자까지 비교)

· st1.compareTo(st2) 의 경우 st1의 객체를 기준으로 사전상의 위치를 비교한다.

  (st1=st2이면 0을 반환,  str1>str2이면 양수를 반환,  str1<str2이면 음수를 반환)

  (쉽게말해 str1(90p)이 str2(100p)보다 사전상 앞에 위치하는 경우 음수를 반환)

· compareToIgnoreCase는 compareTo와는 다르게 대소문자를 신경쓰지 않고 비교하여 정수값을 리턴한다.

 

 

 

4. String 클래스의 valueOf 메소드에 대하여 설명하시오.

· valueOf는 기본 자료형을 문자열로 변환시켜 저장시키는 메소드이며, 데이터 타입마다 코딩이 되어있기 때문에 호출하여 사용이 가능하다.

· ex)

 

5. 아래의 연산과정에서 호출되는 함수(원리)를 써서 표현해 보세요.

String str = "age: " + 17;
· valueOf는 데이터 타입마다 코딩이 되어있는 메소드이므로 자동 컴파일되어

 String str = "age:".concat(String.valueOf(17))); 으로 연산된다.

 

 

6. StringBuilder와 String의 차이는?

· String은 원래의 값을 변경할 수 없는 Immutable의 특성을 가지고 있어 계속적으로 인스턴스를 생성하지만,

 반대로 StringBuilder는 Mutable의 특성을 가지고 있어 하나의 객체를 생성하고 중간 인스턴스를 생성하지 않는다.

 (즉, 하나의 인스턴스를 참조하기 때문에 연산된 값에 계속적으로 연산되어 출력됨)

· String은 매번 새로운 인스턴스를 생성하기 때문에 추가 혹은 삭제되는 내용이 적을 때 주로 사용되고,

  StringBuilder는 for문과 같이 계속적으로 인스턴스가 생성되어야 하는 경우 사용된다.

· cf) StringBuilder와 StringBuffer의 공통/차이점

  : 메소드의 기능과 수, 메소드의 이름과 매개변수의 선언은 동일하다.

  : StringBuffer는 StringBuilder에 비해 스레드에 안전하지만 스레드의 안전성이 불필요한 경우 StringBuffer를 사용하면

   성능 저하만 유발하기 때문에 그 때는 StringBuilder를 사용한다.(스레드의 안전성 차이)

 

 

7. String 을 이용하여 프로그래밍 하시오. **기본**

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//입력 : 990925-1012999
//출력 : 990925 1012999
 
class Number {
    private String str;
 
    public Number() {
    }
    public Number(String str) {
        this.str = str;
    }
    public void input() {
        Scanner sc = new Scanner(System.in);
        System.out.println("주민번호를 입력해주세요(-포함)");
        str = sc.nextLine();
        sc.close();
    }
    public void output() {
        String[] st = str.split("-");
        String ar1 = st[0];
        String ar2 = st[1];
        System.out.println(ar1 + " " + ar2);
    }
}
cs

 

1
2
3
4
5
6
7
class Numbermain {
    public static void main(String[] args) {
        Number number = new Number();
        number.input();
        number.output();
    }
}
cs

 

 

 

8. 아래의 메모리 그림을 그리시오.

int[] ar1 = new int[5];  (int형 배열을 가진 ar1 방 → 연속적인 5개의 방이 생성)

 

 

9. 아래를 프로그래밍 하시오.(단, 클래스로 구성할것)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//입력:lee sunkyo
//출력:first name: lee second name:sunkyo
 
class Name {
    private String fname;
    private String sname;
 
    public String getFname() {
        return fname;
    }
    public void setFname(String fname) {
        this.fname = fname;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public void input() {
        Scanner sc = new Scanner(System.in);
        System.out.println("영문 성과 이름을 입력해주세요.");
        fname = sc.next();
        sname = sc.next();
        sc.close();
    }
    public void output() {
        System.out.println("first name: " + fname);
        System.out.println("second name: " + sname);
    }
}
cs

 

1
2
3
4
5
6
7
class Namemain {
    public static void main(String[] args) {
        Name name = new Name();
        name.input();
        name.output();
    }
}
cs

 

 

10. 아래를 프로그래밍 하시오.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/* 
입력 : 홍 길동 
출력 : 성 = 홍  이름 = 길동 
 
입력 : 홍길동 
출력 : 공백이 없군요. 다시 입력해주세요.  */
 
class Name {
    private String name;
    private int stop;
    private boolean a = true;
 
    void input() {
        Scanner sc = new Scanner(System.in);
        System.out.print("이름을 입력하세요 : ");
        name = sc.nextLine();
    }
    boolean cut() {
        stop = name.indexOf(" ");
        if (stop == -1) {
            System.out.println("공백이 없군요 다시 입력해주세요.");
            System.out.println();
            return a = true;
        }
        System.out.print("성: " + name.substring(0, stop));
        System.out.println("  이름: " + name.substring(stop + 1));
        return a = false;
    }
    void print() {
        while (a) {
            input();
            cut();
        }
    }
}
cs

 

1
2
3
4
5
6
class Namemain {
      public static void main(String[] args) {
          Name n = new Name();
          n.print();
      }
}
cs

 

11. 아래를 프로그래밍 하시오.

  "Hello.java" 문자열에서 파일명과 확장자인 java를 분리시키는 프로그램을 짜시오.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/* 
입력: Hello.java
출력: 파일이름은:Hello 이며 확장자는 java 입니다.
 
입력: Java.avi
출력: 파일이름은:Java 이며 확장자는 avi 입니다.  */
 
class Hellojava {
    private String str;
 
    public Hellojava() {
    }
    public Hellojava(String str) {
        this.str = str;
    }
    public void input() {
        Scanner sc = new Scanner(System.in);
        System.out.println("문자열을 입력해주세요");
        str = sc.nextLine();
        sc.close();
    }
    public void output() {
        int n = 0;
        for (int i = 0; i <= str.length() - 1; i++) {
            if (str.charAt(i) == '.')
                n = i;
        }
        System.out.println("파일이름은 " + str.substring(0, n) + "이며 확장자는 " + str.substring(n + 1+ "입니다.");
    }
}
 
cs
1
2
3
4
5
6
7
class Hellomain {
    public static void main(String[] args) {
        Hellojava hello = new Hellojava();
        hello.input();
        hello.output();
    }
}
cs

 

 

12. Scanner 클래스 이용해서 한 줄 읽고, 공백으로 분리된 "단어"가 몇 개 들어 있는지 확인해보자.

"그만"을 입력할 때까지 반복하는 프로그램이다. 힌트(split 함수를 이용해 볼것) 

 

1) main 함수만을 이용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/* 
입력 : Java Programming
출력 : 단어의 개수는 2
입력 : 자바 수업은 2층 C클래스
출력 : 단어의 개수는 4
입력 : 그만
출력 : 프로그램 종료  */
 
class Wordcountmain2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("단어개수 확인하기");
        
        while (true) {
            System.out.println("입력:");
            String sentence = sc.nextLine();
            if (sentence.equals("stop")) {
                System.out.println("프로그램 종료");
                break;
            }
            String[] words = sentence.split(" ");
            System.out.println("단어의 갯수는: " + words.length);
        }
        sc.close();
    }
}
cs

 

2) class 이용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Wordcount {
    private String sentence;
    private String[] words;
    
    Wordcount(String sentence) {
        this.sentence = sentence;
    }
    private void wordSplit() {
        if (sentence == null) {
            System.out.println("입력값이 없습니다.");
            return;
        }
        this.words = sentence.split(" ");
    }
    private void wordPrint() {
        if (words == null) {
            System.out.println("입력값이 없습니다.");
            return;
        }
        System.out.println("단어의 갯수는: " + words.length);
        for (int i = 0; i < words.length; i++) {
            System.out.println("단어는" + words[i]);
        }
    }
    public void getResult() {
        wordSplit();
        wordPrint();
    }
}
cs
1
2
3
4
5
6
7
8
9
10
11
class Wordcountmain {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("단어개수 확인하기");
        while (true) {
            System.out.println("입력:");
            Wordcount wordCount = new Wordcount(sc.nextLine());
            wordCount.getResult();
        }
    }
}
cs