1.String 클래스에서 concat 메서드를 설명하시오.
- 문자열을 연결시키는 메소드
- "문자열1" + "문자열2" 연결의 경우, "문자열1".concat("문자열2")와 같은 방법으로 연결
- String으로 생성되는 객체는 immutable이기 때문에 리터럴이 바뀌지 않는다. 덧붙이거나 뗄 수 없다. 그래서 concat() 메소드를 사용해 Stirng 클래스를 붙이면 그때마다 계속 새로운 객체를 생성한다. (그림 참고)
- concat() 메소드는 계속 이어서 호출 가능
class StringConcat {
public static void main(String[] args) {
String st1 = "Coffee";
String st2 = "Bread";
String st3 = st1.concat(st2);
System.out.println(st3);
String st4 = "Fresh".concat(st3); //타입을 String으로 알아서 잡음
System.out.println(st4);
}
}
2.str.substring(2, 4); substring 사용법에 대하여 설명하시오.
문자열을 일부 추출하는 substring() 메소드
String str = "abcdefg";
str.substring(2); //인덱스 2 부터 끝까지. 문자열 "cdefg" 반환
str.substring(2, 4); //인덱스 2 ~ 3에 위치한 내용의 문자열 "cd" 반환
//함수 오버로딩 적용됨
//index는 0부터 셈
3.st1.compareTo(st2);compareTo 사용법에 대하여 설명하시오.
compareTo() 메소드 와 compareToIgnoreCase() 메소드 (IgnoreCase → 대소문자 구분안함)
문자열의 내용을 비교해서 사전 상에서 앞에 있는지 뒤에 있는지 알려 줌
java
int cmp; //리턴값은 정수 int
cmp = st1.compareTo(st2);**
cmp == 0 → 같은 문자열이다.
cmp < 0 → st1이 앞에 나온다.
cmp > 0 → st1이 뒤에 나온다.
4.String.valueOf 에 대하여 설명하시오.
기본 자료형(모든 타입을)의 값을 문자열로 바꿀 때 사용하는 valueOf() 메소드
함수 오버로딩이 적용되어 있어 기본 자료형 8개의 타입의 값을 모두 String 타입으로 바꿔줄 수 있다.
double e = 2.718281;
String se = String.valueOf(e); //valueOf();는 함수이고, .으로 접근하는 static임
//se에는 "2.718281"
static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(double d)
static String valueOf(float f)
static String valueOf(int i)
static String valueOf(long l)
// 함수 오버로딩이 적용되어있다.
5. 아래의 연산과정에서 호출되는 함수(원리)를 써서 표현해 보세요.
String str = "age: " + 17;
double e = 2.718281;
String se = String.valueOf(e); //valueOf();는 함수이고, .으로 접근하는 static임
//se에는 "2.718281"
static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(double d)
static String valueOf(float f)
static String valueOf(int i)
static String valueOf(long l)
// 함수 오버로딩이 적용되어있다.
6.StringBuilder 와 String 의 차이는?
String은 immutable(불변함) 이고 → 값 변화 못시킴
StringBuilder와 StringBuffer는 mutable(변함) 이다. → 값 변화 시킴**
String은 immutable이기 때문에 예를 들어 + ( concat() ) 를 하게되면 기존의 메모리를 두고 계속 새로운 객체를 생성한다.
만일 for문으로 concat()을 계속 사용하게 로직을 사용 하면 StringBuilder나 StringBuffer에 비해 시간도 오래 걸리고, 메모리공간도 많이 사용하게 되는 단점이 있다. (It costs a lot! 비용이 든다. _비용보다 시간이 더)
반면에 StringBilder 와 StirngBuffer는 mutable이라서 최초 한번만 객체를 생성하고 거기에 + ( append() )를 할 경우 **같은 주소(가리키고 있는)의 메모리 공간 안에서 객체 크기를 증가 시키며 두 문자열을 더해준다. ([최적화])
StringBuilder, StringBuffer 메소드 예시 (string에도 있는 메소드이다.)
7.String 을 이용하여 프로그래밍 하시오.
입력 : 990925-1012999
출력 : 990925 1012999
import java.util.Scanner;
public class SocialSecuritynumber {
private String input;
private StringBuilder ssNumber;
private void inputSSN() {
Scanner sc = new Scanner(System.in);
System.out.println("주민번호 전체를 입력하세요. (예: 123456-789012)");
input = sc.nextLine();
sc.close();
}
private void removeHyphen() {
if(input.length()<13 || input.length()>13) {
System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
return;
}
ssNumber = new StringBuilder(input);
ssNumber.replace(6, 7," ");
}
private void namePrint() {
System.out.println(ssNumber);
}
public void manageSSN() {
inputSSN();
removeHyphen();
namePrint();
}
}
public class SSN_Main {
public static void main(String[] args) {
SocialSecuritynumber ssn = new SocialSecuritynumber();
ssn.manageSSN();
}
}
8.아래의 메모리 그림을 그리시오.
int[] ar1 = new int[5];
9.아래를 프로그래밍 하시오.(단 클래스로 구성할것)
입력:lee sunkyo
출력:first name: lee second name:sunkyo
public class Name {
private String firstName;
private String secondName;
public Name() {
}
public Name(String firstName, String secondName) {
this.firstName = firstName;
this.secondName = secondName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getSecondName() {
return secondName;
}
public void setSecondName(String secondName) {
this.secondName = secondName;
}
private void input () {
Scanner sc = new Scanner(System.in);
System.out.println("영문 이름을 입력하세요: 성 이름");
secondName = sc.next();
firstName = sc.next();
sc.close();
}
private void pirntName () {
if(secondName == null || firstName == null) {
System.out.println("입력이 안되었습니다.");
return;
}
System.out.print("first name: "+ firstName + ", ");
System.out.println("second name: "+ secondName);
}
public void manageName() {
input();
pirntName();
}
}
public class NameMain {
public static void main(String[] args) {
Name names = new Name();
names.manageName();
}
}
10.아래를 프로그래밍 하시오.
입력 : 홍 길동
출력 : 성 = 홍 이름 = 길동
입력 : 홍길동
출력 : 공백이 없군요. 다시 입력해주세요.
import java.util.Scanner;
public class KoreanName {
private String familyName; //local 변수 일때는 직접 초기화.
private String givenName;
private String input;
private int blank;
private int length;
Scanner sc;
public void askName() {
sc = new Scanner(System.in);
System.out.println("이름을 입력하세요 (예: 홍 길동)");
}
public void inputName() {
input = sc.nextLine();
}
public boolean checkBlank() {
if(input.contains(" "))
return true;
return false;
}
private void whereIsBlank() {
for(int i=0; i<input.length(); i++) {
if(input.charAt(i) == ' ') {
blank = i;
}
}
}
private void leghtOfName(){
length = input.length();
}
private void splitName() {
familyName = input.substring(0, blank);
givenName = input.substring(blank+1, length);
}
private void pirntName() {
System.out.println("성 = "+ familyName + ", 이름 = "+ givenName);
}
public void doAgainPrint() {
System.out.println("공백이 없군요. 다시 입력해 주세요.");
}
public void blankCheck_namePrint() {
whereIsBlank();
leghtOfName();
splitName();
pirntName();
}
}
public class KrNameMain {
public static void main(String[] args) {
KoreanName whichName = new KoreanName();
whichName.askName();
while(true) {
whichName.inputName();
if(whichName.checkBlank()) {
whichName.blankCheck_namePrint();
break;
}else {
whichName.doAgainPrint();
continue;
}
}
}
}
11.아래를 프로그래밍 하시오.
"Hello.java" 문자열에서 파일명과 확장자인 java를 분리시키는 프로그램을 짜시오.
입력: Hello.java
출력: 파일이름은:Hello 이며 확장자는 java 입니다.
입력: Java.avi
출력: 파일이름은:Java 이며 확장자는 avi 입니다.
문제12. Scanner 클래스를 이용해서 한 줄 읽고, 공백으로 분리된 "단어"가 몇 개 들어 있는지 확인해보자.
"그만"을 입력할 때까지 반복하는 프로그램이다.힌트(split 함수를 이용해 볼것)
예) 입력 : Java Programming
출력 : 단어의 개수는 2
입력 : 자바 수업은 2층 C클래스
출력 : 단어의 개수는 4
입력 : 그만 > 출력 : 프로그램 종료
public class SeparateFileName {
private String input;
private int dot;
private int length;
private String fileName, extention;
public SeparateFileName() {
}
public SeparateFileName(String input) {
this.input = input;
}
public String getInput() {
return input;
}
public void setInput(String input) {
this.input = input;
}
private void inputFileName() {
System.out.println("파일 이름을 입력하세요. (파일명.확장자)");
Scanner sc = new Scanner(System.in);
input = sc.nextLine();
sc.close();
}
private void fileLength() {
length = input.length();
}
private void whereIsDot() {
for(int i=0; i<input.length(); i++) {
if(input.charAt(i) == '.') {
dot = i;
}
}
}
private void separate() {
fileName = input.substring(0, dot);
extention = input.substring(dot+1, length);
}
private void seperatePrint() {
System.out.println("파일 이름은: " + fileName + " 이며 확장자는 " + extention + " 입니다." );
}
public void fileNameSeperation() {
inputFileName();
fileLength();
whereIsDot();
separate();
seperatePrint();
}
}
public class FileNameMain {
public static void main(String[] args) {
SeparateFileName checkFile = new SeparateFileName();
checkFile.fileNameSeperation();
}
}
'IT 면접족보 > 자바 면접족보' 카테고리의 다른 글
자바 면접 족보 정리(14일 차 ) (0) | 2020.12.11 |
---|---|
자바 면접 족보 정리(13일 차 ) (0) | 2020.12.11 |
자바 면접 족보 정리(11일 차 ) (0) | 2020.12.09 |
자바 면접 족보 정리(10일 차 ) (0) | 2020.12.08 |
자바 면접 족보 정리(9일 차 ) (0) | 2020.12.07 |