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 |
'bitcamp > 면접족보' 카테고리의 다른 글
면접족보 20/12/10_상속 (0) | 2021.01.30 |
---|---|
면접족보 20/12/09_배열 (0) | 2021.01.30 |
면접족보 20/12/07_메소드 오버로딩 (0) | 2021.01.24 |
면접족보 20/12/04_캡슐화, static, JAVA의 메모리 영역 (0) | 2021.01.24 |
면접족보 20/12/03_경로설정, 접근제한자 (0) | 2021.01.24 |