티스토리 뷰
1. Stirng 에서 concat 메서드에 대해서 설명하시오.
.concat();은 .앞의 문자열과 ()안의 문자열을 붙여서 나열해 출력한다. "Coffee" + "Bread"와 같다.
public 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);
System.out.println(st4);
}
}
// CoffeeBread
// FreshCoffeeBread
또한 문자열끼리 + 연산을 진행하면 내부적으로는 concat을 호출하는 것이다.
2. Stirng 에서 substring 메서드 사용법은?
subString은 문자열 일부를 추출할 때 사용한다.
String str = "abcdefg";
System.out.println(str.substring(2));
// cdefg
String str1 = "abcdefg";
System.out.println(str1.substring(2, 4));
// cd
인덱스첫번째 들어가는 숫자는 인덱스라고 한다. 인덱스는 0부터 시작한다.두번째는 인덱스가 아니라 기존에 수를 세는 것과 똑같이 1부터 시작한다.
(2, 4)는 인덱스로 2번째부터 시작해서 인덱스 4미만까지의 범위(4 - 1의 이하까지)를 출력한다.
3. Stirng compareTo 사용법은?
public static void main(String[] args) {
String st1 = "Lexicographically";
String st2 = "lexicographically";
int cmp;
cmp = st1.compareTo(st2);
if(cmp == 0)
System.out.println("두 문자열은 일치합니다.");
else if (cmp < 0)
System.out.println("사전의 앞에 위치하는 문자: " + st1);
else
System.out.println("사전의 앞에 위치하는 문자: " + st2);
// 사전의 앞에 위치하는 문자 : Lexicographically
if(st1.compareToIgnoreCase(st2) == 0)
System.out.println("두 문자열은 같습니다.");
else
System.out.println("두 문자열은 다릅니다.");
// 두 문자열은 같습니다.
}
compareTo는 사전에 실려있는 순서를 기준으로 비교해 int형 값으로 반환하는데 앞에 실리는 순서대로 번호를 매긴다고 했을 때 먼저 실려있는 문자가 숫자가 더 작기 때문에 비교한 값이 음수가 나오면 st1이 더 앞에 있다.
ex) array가 100번째에 실리고, back이 200번째에 실린다고 할 때 두 값을 빼면 음수가 나온다.
compareToIgnoreCase는 문자열 수로만 비교한다.
4. String.valueOf 에 대하여 설명하시오.
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
valueOf() 메소드는 ()괄호 안의 해당 객체를 String 객체로 변환시켜준다. 이 때 ()의 값이 null일 경우 문자열 "null" 을 반환한다.
toString()도 파라미터 값을 문자열로 바꿔주지만 파라미터 값이 null인 경우 valueOf와 다르게 컴파일 오류가 발생한다.
5. 아래가 실행되는 원리(함수)를 표현해 보세요.
String str = "age" + 17;
String str = "age" + 17;
→ String str = "age".concat(String.valueOf(17)) 숫자 17을 문자열 17로 변경한다.
문자열과 기본 자료형의 + 연산은 내부적으로 기본 자료형을 문자열로 변경한 뒤 문자열끼리 +연산을 진행한다.
6.StringBuilder 와 String 의 차이는?
String의 경우 불변 인스턴스이기 때문에 내부적으로는 메모리 소모가 많고 속도에 영향을 미친다.
(일일히 따로 메모리에 올리기 때문에)
class A{
void a() {
String s1 = "AAa";
for(int i = 0; i < 50000; i++) {
s1 = s1 + "BBB" + 19;
}
}
}
public class Example {
public static void main(String[] args) {
A a = new A();
a.a();
}
}
예를 들어 위의 코드를 실행한다고 하면 해당 코드는 실행은 되지만 속도에 양향을 미친다. 특히나 main 함수에 들어 있지 않고 위에 코드 처럼 객체 생성을 통해 함수를 돌리게 되면 속도가 느려진다. 실무에서는 상당히 큰 문제가 될 수 있다.
그래서 위 같은 코드에 속도에 문제가 생기지 않게 하거나 게임 같은 경우는 c언어를 사용한다.....
속도 저하나 메모리 용량 문제를 해결하기 위해 나온 것 StringBuffer, StringBuilder이다.
둘은 기능적으로는 완전히 동일하다. 다만 buffer는 쓰레드에 안전하다.
쓰레드 안전성이 불필요한 상황에서 buffer를 사용하면 성능 저하만 발생해 이때 builder를 사용한다.
public class StringBuilderTest {
public static void main(String[] args) {
// 문자열 "123"이 저장된 인스턴스 생성
StringBuilder stbuf = new StringBuilder("123");
// 문자열 덧붙이기
stbuf.append(45678);
System.out.println(stbuf.toString());
// 12345678
// 문자열 일부 삭제
stbuf.delete(0, 2); // 0이 시작 위치, 2에 -1한 위치 이하(2위치 미만?)
System.out.println(stbuf.toString());
// 345678
// 문자열 일부 교체
stbuf.replace(0, 3, "AB");
System.out.println(stbuf.toString());
// AB678
// 문자열 내용 뒤집기
stbuf.reverse();
System.out.println(stbuf.toString());
// 876BA
// 일부만 문자열로 반환
String sub = stbuf.substring(2, 4);
System.out.println(sub);
// 6B
}
}
7.아래의 메모리 그림을 그리시오. (1차원 배열)
int[] ar1 = new int[5];
new int[5]에서 5는 방의 개수를 의미한다.
int[]로 5개의 방을 생성할 때 []안의 번호는 인덱스로 0부터 시작한다.
8.아래의 메모리 그림을 그리시오. (1차원 배열)
Box[] ar = new Box[5];
9. 아래를 프로그래밍 하시오.(scanner 사용, 전체 while문 사용)
"Hello.java" 문자열에서 파일명과 확장자인 java를 분리시키는 프로그램을 짜시오.
입력: Hello.java
출력: 파일이름은: Hello 이며 확장자는 java 입니다.
입력: Java.avi
출력: 파일 이름은: Java 이며 확장자는 avi 입니다.
package edu.kosmo.ex.practices;
import java.util.Scanner;
class FileName{
private String file;
public FileName(String file) {
this.file = file;
}
public void resultName() {
String name = "";
String extension = "";
for(int i = 0; i < file.length(); i++) {
if(file.charAt(i) == '.') {
name = file.substring(0, i);
extension = file.substring(i + 1, file.length());
}
}
System.out.println("파일 이름은 " + name + "이며 확장자는 " + extension + "입니다.");
}
}
public class ArrayPractice2 {
public static void main(String[] args) {
while(true) {
Scanner sc = new Scanner(System.in);
System.out.println("파일명을 입력하세요.");
String file = sc.next();
FileName fn = new FileName(file);
fn.resultName();
System.out.println("계속 하시겠습니까? Y or N");
String yesNo = sc.next();
if(yesNo.charAt(0) == 'n' || yesNo.charAt(0) == 'N') {
break;
}
}
System.out.println("종료합니다.");
}
}
import java.util.Scanner;
public class FileNameTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String word = sc.next();
int dot = 0;
for(int i = 0; i < word.length(); i++) {
if(word.charAt(i) == '.') {
dot = i;
}
}
/*
* int index = word.indexOf('.'); System.out.println(index);
*
* String fileName = word.substring(0, index); String extension =
* word.substring(index + 1, word.length());
*/
String fileName = word.substring(0, dot);
String extension = word.substring(dot + 1, word.length());
System.out.println(fileName);
System.out.println(extension);
}
}
→ .indexOf를 사용하면 좀 더 쉽게 할 수 있다!
10.아래를 배열을 활용하여 프로그램을 짜시오.
화폐매수 구하기
- 1원 부터 5000 원 까지 랜덤으로 생성.
- 500원 100 원 50 원 10원은 배열로 선언 하여 저장
해당 랜덤생성된 화폐 매수를 아래와 같이 출력
2860원
출력
500원 : 5개
100원 : 3개
50원 : 1개
10원 : 1개
package edu.kosmo.ex.practices;
import java.util.Scanner;
public class ArrayPractice3 {
public static void main(String[] args) {
int money = (int)(Math.random() * 5000 + 1);
System.out.println(money + "원");
int count[] = new int[4];
count[0] = 500;
count[1] = 100;
count[2] = 50;
count[3] = 10;
for(int i = 0; i < 4; i++) {
System.out.println(String.valueOf(count[i]) + "원 : " + (money / count[i]) + "개");
money = money % count[i];
}
}
}
class MoneyArr{
private int money;
private int[] coin = new int[4];
public MoneyArr(int money) {
this.money = money;
coin[0] = 500;
coin[1] = 100;
coin[2] = 50;
coin[3] = 10;
}
public void show() {
for(int i = 0; i < coin.length; i++) {
System.out.println(coin[i] + "원 : " + (money / coin[i]) + "개");
money = money % coin[i];
}
}
}
public class MoneyArrTest {
public static void main(String[] args) {
int money = (int)(Math.random() * 5000 + 1);
MoneyArr moneyArr = new MoneyArr(money);
System.out.println(money + "원");
moneyArr.show();
}
}
'수업문제' 카테고리의 다른 글
[문제] 10월 21일 (상속) (0) | 2021.10.21 |
---|---|
[문제]10월 20일 (배열, arraycopy, for-each문) (0) | 2021.10.21 |
[문제] 10월 18일 (오버로딩, this, String 객체) (0) | 2021.10.18 |
[문제] 10월 15일 (static 변수와 함수, 스캐너) (0) | 2021.10.15 |
- Total
- Today
- Yesterday
- 부트스트랩
- 쿠키
- response
- abstract
- 진척도 70번
- SOCKET
- string
- Generic
- 세션
- Session
- Request
- TreeSet
- 입출력
- 제네릭
- JSP
- hashset
- Servlet
- 사칙연산 계산기
- toString
- el
- 프로토콜
- exception
- 채팅
- 쓰레드
- equals
- 래퍼 클래스
- 참조형
- 예외처리
- compareTo
- object
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |