이안의 평일코딩

JAVA의 정석 29일차 - String, StringBuffer, Math, Wrapper 본문

Back-end/Java

JAVA의 정석 29일차 - String, StringBuffer, Math, Wrapper

이안92 2020. 7. 23. 09:55
반응형

2020.07.23(목)

 

1. java.lang - Object : 최상위 클래스 (모든 클래스들 통합)

       * 주요 메소드

        (1) finalize() : 소멸자 (메모리 해제) => 최적화(퍼포먼스가 좋아짐)

             => PMD(정적분석) 성능테스트, JMeter(서버성능테스트), JUnit 단위테스트

            자동 메모리 해제 -> 가비지 컬렉션 gc() 메모리 회수

 

        (2) clone() : 있는 그대로 복제 (Spring에서는 prototype)

              1) 새로운 메모리 제작 new

              class A {

                 int a = 10

              }

              A aa = new A(); (원래는 int malloc(A)였음)

              aa.a=100;

              A bb = new A(); (new를 쓰게되면 초기화되서 10이 들어감)

 

              2) 기존 -> 복제 

              A cc = aa clone();

              생성자 : 멤버변수 초기화 담당하는 함수

 

              3) 기존 -> 참조 Call by Reference(값이 바뀜) <-> Call by Value (값이 그대로)

              * String은 Call by Value만 사용해서 안바뀜

 

        (3) toString : 객체를 문자열로 변환 or (String)으로 형변환

 

   *상속

     class A extends B

     B a = new A(); 가능 (B 상속받으므로 B가 더 큼)

     A a = new B(); 불가능

 

     class A (extends Object)

     A a = new A();

     Object a = new A(); 가능

 

 

2. java.lang - String / StringBuffer

 

문자열이 같으면 같은 주소에 저장된다

String s1 = "Hello";

String s2 = "Hello";

s1 == s2

 

String s3 = new String("Hello"); => 새로운 메모리 공간이 생김 (다른 주소에 생성)

s1 != s3

s1.equals(s3)은 같다

equals() : 대소문자를 구분 => 로그인(id, password), 아이디중복

equalsIgnoreCase() : 대소문자 구분없다  => 검색창에서 주로 사용

 

 

 1) String

   (1) 문자열은 주소다 "Hello", "Java"...

   (2) char[] => 제어하는 클래스

   (3) 주요 기능(메소드)

     - length() : 문자의 갯수

     - trim() : 좌우의 공백제거

     - substring() : 문자 분해

     - indexOf() , lastIndexOf() : 문자의 위치

     - equals() : 저장된 문자를 비교

     - 찾기 => 포함 contains ==> LIKE

                   시작 startsWith

                   끝 endsWith

    ===인스턴스 메소드

    static 메소드(공동으로 사용)

     - valueOf() => 모든 기본형을 문자열로 변환

 

  indexOf, trim, length, substring

package com.sist.string;

public class MainClass {

	public static void main(String[] args) {
		String s="background-image: url(' https://mp-seoul-image-production-s3.mangoplate.com/"
				+ "0776fea76b4a824ff583128cb51dd45c.jpg ')";
		String temp=s.substring(s.indexOf("'")+1,s.lastIndexOf("'"));
		System.out.println(temp.trim());

		String ss="예쁜 서해바다를 보면서 즐기는 애프터눈티. 조식먹는 곳 보다 뷰가 시원하지 않은게 아쉽지만 날 좋은 때 오후를 보내기에 나쁘지 않다. 샌드위치는";
		if(ss.length()>20) {
			String sss = ss.substring(0,20)+"...";
			System.out.println(sss);
		}
	}
}

 

Find

package com.sist.string;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.util.*;

/*
 * 	Find (true/false => boolean => if문)
 * 	 => 포함 contains()   =오라클=> LIKE '%데이터%'
 * 	 => 시작 문자열 startsWith()  => LIKE '데이터%'
 * 	 => 끝 문자열 endsWith()     => LIKE '%데이터'
 */

public class MainClass2 {
	
public void find(String ss) {
		try {
			for(int i=1; i<=3; i++) {
				Document doc = Jsoup.connect("https://movie.daum.net/premovie/released?reservationOnly=N&sort=reservation&page="+i).get(); //i가 페이지수	
				Elements title=doc.select("a.name_movie");
				for(int j=0; j<title.size(); j++) { // title.size => 저장된 갯수만큼
					// boolean java.lang.String.endsWith(String suffix  
					// boolean java.lang.String.startsWith(String prefix)
					// boolean java.lang.String.contains(CharSequence s)
					if(title.get(j).text().endsWith(ss)) {
					//if(title.get(j).text().startsWith(ss)) {
					//if(title.get(j).text().contains(ss)) {
						System.out.println(title.get(j).text());
					}
					/*
					 *  실제 찾기 => contains()
					 *  서제스트 => startsWith() : 자동 완성기
					 */
				}
			}
		}catch(Exception ex) {}
	}

	public static void main(String[] args) {
		MainClass2 m = new MainClass2();
		Scanner scan = new Scanner(System.in);
		System.out.print("검색어:");
		String ss = scan.next();
		m.find(ss);
	}
}

 

ValueOf()

package com.sist.string;
// valueOf() : 모든 데이터형을 문자열로 변환 ==> static
// String.valueOf(int) ==> 윈도우, 웹, 모바일 ==> 취급을 문자열
// <input type="text">

import java.awt.*;
import javax.swing.*;

public class MainClass3 extends JFrame {
	JTextField tf = new JTextField();
	JLabel la = new JLabel();
	
	public MainClass3() {
		tf.setText(String.valueOf(10)); //윈도우창은 정수라는 개념이 없음 => 문조건 문자열
		la.setText(String.valueOf(10.5));
		add("North", tf);
		add("South", la);
		setSize(350, 200);
		setVisible(true);
	}
	public static void main(String[] args) {
		new MainClass3();
	}
}

 

 

 2) StringBuffer

package com.sist.string;
// StringBuffer : 문자열을 결합할 경우 ==> append()

import java.io.*; // => CheckException 예외처리를 하고 사용. 파일 읽어온 값
					// 또는 throws Exception 해도됨

public class MainClass4 {
	
	public static void main(String[] args) {
		try {
			// 파일 읽기
			// String data = "";
			StringBuffer data = new StringBuffer();
			FileReader fr = new FileReader("c:\\javaDev\\movie.txt");
			int i=0;
			while((i=fr.read())!=-1) { //한글자씩 읽어옴, -1이 파일의 종료점 (EOF : End Of File)
				data.append(String.valueOf((char)i));
			}
			fr.close();
			
			System.out.println(data.toString()); //문자열로 변환
		}catch(Exception ex) {}
	}
}
package com.sist.string;

import java.io.FileReader;
/*
 *  StringBuffer : 동기화 (Builder보다 더 안정성이 있음)
 *  StringBuilder : 비동기화 (속도 빠름)
 */
public class MainClass5 {

	public static void main(String[] args) throws Exception {
		long start = System.currentTimeMillis();
		//String data = "";
		//StringBuffer sb = new StringBuffer();
		StringBuilder sb = new StringBuilder();
		FileReader fr = new FileReader("c:\\javaDev\\movie.txt");
		int i=0;
		while((i=fr.read())!=-1) {
			//data+=String.valueOf((char)i);
			sb.append(String.valueOf((char)i));
		}
		fr.close();
		long end=System.currentTimeMillis();
		System.out.println("수행시간:"+(end-start));
	}
}

 

join, format

package com.sist.string;
// join, format, indexOf => static
public class MainClass6 {

	public static void main(String[] args) {
		String[] arr = {"홍길동", "심청이", "박문수", "이순신", "춘향이"};
		System.out.println(String.join("-", arr)); //홍길동-심청이-박문수-이순신-춘향이
		
		String str = String.format("%d - %d = %d", 10, 2, 10-2);
		System.out.println(str); // 10 - 2 = 8
	}
}

 

 

3. java.lang - Math / Wrapper(기본형에 대한 클래스)

  1) Math
    = random() =>  0.0~0.99
    = ceil() => 올림함수       Math.ceil(10.1) => 11

        총 페이지 구하기

 

  2) Wrapper(기본형에 대한 클래스)
    ==================> int a = (int)"10"; (X)
    Integer = parseInt()
    Double = parseDouble()
    Boolean = parseBoolean()
    Long = parseLong()

 

     //Integer i = new Integer(10);
     //int ii = i.valueOf()
     Integer i = 10; // 박싱
     int ii = i; // 언박싱

 

     자바 3대 클래스
     1. String
     2. Integer
     3. ArrayList ==> CURD =오라클=> 삭제DELETE, 입력INSERT, 수정UPDATE, 조회SELECT

 

   * System
     = System.currentTimeMillis(); 로그파일 => 현재시간
     = System.out.println(); => 화면 출력
     = System.gc(); => 메모리를 회수 => 가비지컬렉션 호출
     = System.exit(); => 프로그램 종료

반응형
Comments