본문 바로가기
코딩/수업 정리

20.12.08 Tue [012]

by 6^6 2020. 12. 8.
728x90
  • concat 함수 - 문자열+문자열
  • compareTo 함수 - 문자열 비교
  • compareToIgnoreCase 함수 - 대소문자달라도 같은걸로 인식
  • valueOf 함수 - 기본자료형값을 문자열로 바꾸기
  • concat함수 - 문자열+기본자료형
  • string메모리에 올라갈때 어떻게 되는가 ([011]복습)
  • 문자열출력(toString메소드, printf메소드)
  • 배열

**이클립스 F3에 있는것, 문자에 있는 노란박스 설명 꼭 보기 - 실력이 는다.

 

concat 함수

package java_1208;

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

 

 

 

 

함수 오버로딩(같은함수이름으로 갯수달리하는것.)의 예재

 

 

 

compareTo 함수

:기준값.compareTo( 비교대상 ) 

public class StringConcat {
	public static void main(String[] args) {
		String st1 = "Lexicographically";
		String st2 = "lexicographically"; //앞에 대소문자가 다름
		int cmp;

		if (st1.equals(st2))
			System.out.println("두 문자열은 같습니다.");
		else
			System.out.println("두 문자열은 다릅니다.");

		cmp = st1.compareTo(st2);
		if (cmp == 0)
			System.out.println("두 문자열은 일치합니다.");
		else if (cmp < 0)
			System.out.println("사전의 앞에 위치하는 문자 : " + st1);
		else
			System.out.println("사전의 앞에 위치하는 문자 : " + st2);

		if (st1.compareToIgnoreCase(st2) == 0)
			System.out.println("두 문자열은 같습니다.");
		else
			System.out.println("두 문자열은 다릅니다.");
	}
}//두 문자열은 다릅니다.
//사전의 앞에 위치하는 문자 : Lexicographically
//두 문자열은 같습니다.

//str1.compareTo(st2) → str1 기준으로 비교하는것

 

 

compareToIgnoreCase 함수

: 대소문자여도 서로 같은걸로 인식

 

 

 

String.valueOf 함수 (꼭 외우기)

:기본 자료형의 값을 문자열로 바꾸기

 

concat 함수 

문자열+문자열 ok / 문자열+기본자료형 ok

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

String하고 int는 못더해줌

concat으로 한쪽으로 변환 해줘야 함. 

 

 

 

 

//age : 17

 

 

**문자열은 메모리에 하나하나 char처럼 잡는다

String 객체를 표현하는 값은 char의 배열이다.

String 객체 대부분은 원시 타입처럼 취급한다. 그러므로 String 리터럴을 생성할 때 new 키워드를 이용할 필요가 없다.
실제 컴파일할 때 String 리터럴("문자")은 String 객체로 생성된다.

String helloString1 = new String("Hello World!");

String helloString2 = "Hello World!";

assertEquals(helloString1, helloString2); 

위의 두 객체는 같으며 같은 값으로 취급된다. 따옴표 안에 있는 값들의 리터럴을 String 객체로 생성한다.

 

 

 

문자열결합의 최적화

 

 

 

 

 

 

 

 

 

 

StringBuilder

변한다.(!=immutable)

- 뒤에 여러값을 넣을 수 있다.

 

 

StringBuilder 함수

public class prac {
	public static void main(String[] args) {
		//문자열 "123"이 저장된 인스턴스의 생성
		StringBuilder stbuf = new StringBuilder("123");
		
		stbuf.append(45678); //문자열 덧붙이기
		System.out.println(stbuf.toString());
		
		stbuf.delete(0,2); //문자열 일부 삭제
		System.out.println(stbuf.toString());

		stbuf.replace(0,  3,  "AB"); //문자열 일부 교체
		System.out.println(stbuf.toString());
		
		stbuf.reverse(); //문자열 내용 뒤집기
		System.out.println(stbuf.toString());
		
		String sub = stbuf.substring(2, 4); //일부만 문자열로 반환
		System.out.println(sub);
	}
}//12345678
//345678
//AB678
//876BA
//6B

.toString(→String빌더) 을 쓰는 이유. toString으로 고슬링이 오버라이딩을 안시켜줘서?

 

 

 

StringBuffer 함수

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

문자열출력

toString 메소드

Box클래스가 출력돼서 Camera(문자열)로 나옴!! → 다형성이 적용돼서 나오는것임

 

 

 

printf 메소

 

 

 

배열

:연속된 공간을 만들어주는 것.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

참조형객체

↑박스형객체를 가지고있음. [5]개면 20byte.

 

**

객체생성은했는데 값이 안들어갔을경우-컴파일러가 기본적으로 값넣어줌

인스턴스변수에 대해서는 초기화를 시켜줌

참조형에는 null값을 넣어줌. int,double에서는 0값을 넣어줌

배열도 객체생성했을때 컴파일러가 기본적으로 값넣어줌. -0넣어줌

 

 

↓무조건외우기★

 

 

 

 

 

그림 무조건 이해하고 외우기!!

 

 

 

←주소값이 들어가있다.

println에 객체(레퍼런스 참조형)를 넣게되면 null이면 null뿌림. toString을 호출.

↕같은거!

public class Box {

	private String conts;

	Box(String cont) {
		this.conts = cont;
	}

	public String toString() {
		return conts;
	}

	public static void main(String[] args) {
		Box[] ar = new Box[3];

		ar[0] = new Box("First");
		ar[1] = new Box("Second");
		ar[2] = new Box("Third");

		System.out.println(ar[0]); //println에 참조형객체가 들어옴
		System.out.println(ar[1]);//만약 값없으면 null출력.
		System.out.println(ar[2]);
	}
}//First
//Second
//Third

 

 

 

오늘의 문제

 

1. String 클래스에서 concat 메서드를 설명하시오.

문자열+문자열을 더해줄 때, 문자열+기본자료형을 더해줄 때 필요하다.

"문자열1" + "문자열2" 연결의 경우, "문자열1".concat("문자열2") 와 같은 방법으로 연결


2. str.substring(2, 4); substring 사용법에 대하여 설명하시오.

일부만 문자열로 반환시키는 문자열자르기 함수다.

 

ex)

String str = "123456";

StringBuilder stbuf = new StringBuilder("123456")

 

str.substring(2);//3456 출력

String sub = stbuf.substring(2, 4); //34출력

 


3. st1.compareTo(st2);compareTo 사용법에 대하여 설명하시오.

ex)

int cmp; //리턴값은 정수

int cmp = st1.compareTo(st2);

cmp == 0 → 같은 문자열이다.

cmp > 0 → st1이 앞에 나온다.

cmp < 0 → st1이 뒤에 나온다.

 


4. String.valueOf 에 대하여 설명하시오.

기본 자료형의 값을 문자열로 바꾸는 함수

 

5. 아래의 연산과정에서 호출되는 함수(원리)를 써서 표현해 보세요.
String str = "age: " + 17;

덧셈 연산자를 진행할때 한쪽이 String 형이면 나머지도 String 형태로 변환 한 다음 String형 문자열로 결합한다.
String형 "age: "에 Int형 "17" 을 더하기 연산자로 출력을 하면 컴퓨터는 Int형 "17"을 String형 "17"로 변환시킨 후 연결시켜 age: 17 이라는 문자열 글자를 출력한다. 

 

6. StringBuilder 와 String 의 차이는?

String은 immutable(불변) 속성을 가진다-안정성유지

StringBuilder는 mutable(가변)속성을 가져서 버퍼의 크기가 유연하며 많은 연산을 필요로할때 사용하기 적합하다.


7. String 을 이용하여 프로그래밍 하시오.
입력 : 990925-1012999
출력 : 990925 1012999

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

		Number number = new Number();
		number.input();
		number.print();

	}
}

 

import java.util.Scanner;

public class Number {
	private String num;

	public Number(String words) {
		this.num = num;
	}

	public Number() {

	}

	public void input() {
		System.out.println("주민번호를 입력하시오.");

		Scanner sc = new Scanner(System.in);
		num = sc.nextLine();

	}

	public void print() {

		if (num == null) {
			System.out.println("오류");

			return;
		} else {
			String text = num.replace('-', ' ');

			System.out.println(text);
		}

	}
}

 

 

 

 


8. 아래의 메모리 그림을 그리시오.
int[] ar1 = new int[5];

 

                        (new int[5])

  ar1 ---참조---→ ㅁㅁㅁㅁㅁ(원소의 개수가 5개인 int 배열)

 
9. 아래를 프로그래밍 하시오.(단 클래스로 구성할것) 
입력:lee sunkyo
출력:first name: lee second name:sunkyo

 

import java.util.Scanner;

public class prac { // 배열객체 class로 못만들겠어요...
	public static void main(String[] args) {

		String[] name = new String[2];
		int fullname = name.length;

		System.out.println("영어 이름을 입력하세요");

		Scanner sc = new Scanner(System.in);

		for (int i = 0; i < fullname; i++) {
			name[i] = sc.next();
		}
		for (int i = 0; i < fullname; i++) {
			System.out.println("성 : " + name[i]);
			System.out.println("이름 : " + name[1 - i]);
			return;
		}

	}

}

 

 

 


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

입력 : 홍 길동 
출력 : 성 = 홍  이름 = 길동 

입력 : 홍길동 
출력 : 공백이 없군요. 다시 입력해주세요.

import java.util.Scanner;

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

		Scanner sc = new Scanner(System.in);
		String[] name = new String[2];

		
		System.out.println("이름을 입력하세요");
		for(int i=0; i<name.length; i++) {
			
		
		name[i]=sc.next();
		}
		if(name[1] == null) { //오류
			System.out.println("공백이 없군요");
		}
		System.out.println("성 : " + name[0]);
		System.out.println("이름 : " + name[1]);
		}
	}



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

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

입력: Hello.java
출력: 파일이름은:Hello 이며 확장자는 java 입니다.

입력: Java.avi 
출력: 파일이름은:Java 이며 확장자는 avi 입니다.
문제12. Scanner 클래스를 이용해서 한 줄 읽고, 공백으로 분리된 "단어"가 몇 개 들어 있는지 확인해보자.

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

예) 입력 : Java Programming 
출력 : 단어의 개수는 2
입력 : 자바 수업은 2층 C클래스 
출력 : 단어의 개수는 4
입력 : 그만 > 출력 : 프로그램 종료
import java.util.Scanner;

public class TestMain {
	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.equarl("stop"){ //도 써도 됨
			if (sentence.compareToIgnoreCase("stop") == 0) {
				System.out.println("프로그램 종료");
				break;
			}
			String[] words = sentence.split(" "); // 공백일때 분리한다는것.
			System.out.println("단어의 갯수는" + words.length);
		}
		sc.close(); //깔끔하게.
	}
}
import java.util.Scanner;

public class TestMain {
	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.equarl("stop"){ //도 써도 됨
			if (sentence.compareToIgnoreCase("stop") == 0) {
				System.out.println("프로그램 종료");
				break;
			}
			String[] words = sentence.split(" "); // 공백일때 분리한다는것.
			System.out.println("단어의 갯수는" + words.length);

			for (int i = 0; i < words.length; i++) { 	//이부분 추가
				System.out.println("단어는" + words[i].toString());
			}
		}
		sc.close(); // 깔끔하게.
	}
}

↓CLASS로 만들기

 

 

public class WordCount {
	private String sentence; // privete잊지말기
	private String[] words;

	WordCount(String sentence) { // while문 생성자 만들기
		this.sentence = sentence;
	}

	// public하면 고객님이 헷갈릴수있으니까 private로
	private void wordSplit() { // 공백자르는 함수

		if (sentence == null) { // null체크해주기
			System.out.println("입력값이 없습니다.");
			return;
		}
		this.words = sentence.split(" ");
		System.out.println("단어의 갯수는" + words.length);

	}

	// public하면 고객님이 헷갈릴수있으니까 private로
	private void wordPrint() {
		if (words == null) { // null체크해주기
			System.out.println("입력값이 없습니다.");
		}
		for (int i = 0; i < words.length; i++) {
			System.out.println("단어는" + words[i].toString());
		}

	}

	public void getResult() {
		wordSplit();
		wordPrint();

	}
}
import java.util.Scanner;

public class TestMain {
	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();

		}

	}
}

 

728x90

'코딩 > 수업 정리' 카테고리의 다른 글

20.12.10 Thu [014]  (0) 2020.12.10
20.12.09 Wed [013]  (0) 2020.12.09
20.12.07 Mon [011]  (0) 2020.12.07
20.12.04 Fri [010]  (0) 2020.12.04
20.12.03 Thu [009]  (0) 2020.12.03

댓글