[자바의 정석 기초편] StringBuffer, Math 클래스

JEREGIM·2023년 2월 28일
0

자바의 정석 기초편

목록 보기
11/23

📌StringBuffer 클래스

String처럼 문자형 배열(char[])을 내부적으로 가지고 있다.

String과 다르게 내용을 변경할 수 있다.(mutable)

StringBuffer sb = new StringBuffer("abc");
sb.append("123");

System.out.println(sb);

abc123

배열은 길이 변경 불가. 공간이 부족하면 새로운 배열을 생성해야 한다.
1. 새로운 배열 생성
2. 내용 복사
3. 참조 변경

StringBuffer의 변경

StringBuffer는 String과 달리 내용 변경이 가능하다.

  • append() - 추가, delete() - 삭제, insert() - 삽입 등의 메서드는 반환 타입이 StringBuffer 이다.
StringBuffer sb = new StringBuffer("abc");
sb.append("123").append("aaa");
  • 반환 타입이 StringBuffer이기 때문에 sb.append("123")에 다시 .append("aaa")를 할 수 있다.

StringBuffer의 비교

StringBuffer는 String과 다르게 equals()가 오버라이딩되어 있지 않다.(주소 비교)

StringBuffer sb = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");

System.out.println(sb == sb2);
System.out.println(sb.equals(sb2));

false
false

  • 주소를 비교하기 때문에 값이 같아도 false가 나온다.
String s = sb.toString(); // sb를 String으로 변환
String s2 = sb2.toString();

System.out.println(s.equals(s2));

true

  • StringBuffer를 String으로 변환 후 equals()로 비교해야 한다.

StringBuffer의 생성자와 메서드

StringBuffer() 생성자

: 16개 문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스를 생성한다.

StringBuffer sb = new StringBuffer();

sb = ""

  • 길이가 16인 char[] 배열이 생성된다.

StringBuffer(int length) 생성자

: 지정된 개수의 문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스를 생성한다.

StringBuffer sb = new StringBuffer(10);

sb = ""

  • 길이가 10인 char[] 배열이 생성된다.

StringBuffer(String str) 생성자

: 지정된 개수의 값(str)을 갖는 StringBuffer 인스턴스를 생성한다.

StringBuffer sb = new StringBuffer("abc");

sb = "abc";

  • 길이가 str.length + 16인 char[] 배열이 생성된다.

StringBuffer append(boolean b or char c, String str, char[] chars 등 다양한 타입 가능)

: 매개변수로 입력된 값을 문자열로 변환하여 StringBuffer 인스턴스가 저장하고 있는 문자열의 뒤에 추가한다.

StringBuffer sb = new StringBuffer("abc");
sb.append(true).append(123).append("ABC");

sb = "abctrue123ABC"

int capacity()

: StringBuffer 인스턴스의 버퍼 크기(char[] 배열의 길이)를 알려준다. length()는 버퍼에 담긴 문자열의 길이를 알려준다.

StringBuffer sb = new StringBuffer(100);
sb.append("1234");

int bufferSize = sb.capacity();
int stringSize = sb.length();

bufferSize = 100
stringSize = 4

  • 처음 sb를 생성할 때 버퍼 크기를 100으로 초기화해줬기 때문에 sb.capacity()는 100
  • sb에 담긴 문자열 "1234"의 길이가 4이기 때문에 sb.length()는 4

char charAt(int index)

: 지정된 위치(index)에 있는 문자를 반환한다.

StringBuffer sb = new StringBuffer("abc");
char ch = sb.charAt(2);

ch = 'c'

StringBuffer delete(int start, int end)

: 시작 위치(start)부터 끝 위치(end) 사이에 있는 문자를 제거한다. 끝 위치의 문자는 제외

StringBuffer sb = new StringBuffer("0123456");
sb.delete(3,6);

sb = "0126"

StringBuffer deleteCharAt(int index)

: 지정된 위치(index)의 문자를 제거한다.

StringBuffer sb = new StringBuffer("0123456");
sb.deleteCharAt(3);

sb = "012456"

StringBuffer insert(int pos, boolean b or char c, String str, char[] chars 등 다양한 타입 가능)

: 두 번째 매개변수로 받은 값을 문자열로 변환하여 지정된 위치(pos)에 추가한다. pos는 0부터 시작

StringBuffer sb = new StringBuffer("0123456");
sb.insert(4,'.');

sb = "0123.456"

int length()

: StringBuffer 인스턴스의 저장되어 있는 문자열의 길이를 반환한다.

StringBuffer sb = new StringBuffer("0123456");
int len = sb.length();

len = 7

StringBuffer replace(int start, int end, String str)

: 지정된 범위(start <= x < end)의 문자들을 주어진 문자열(str)로 바꾼다.

StringBuffer sb = new StringBuffer("0123456");
sb.replace(3, 6, "AB");

sb = "012AB6"

  • "345" -> "AB" 로 바뀌었다.

StringBuffer reverse()

: StringBuffer 인스턴스에 저장되어 있는 문자열의 순서를 거꾸로 나열한다.

StringBuffer sb = new StringBuffer("0123456");
sb.reverse();

sb = "6543210"

void setCharAt(int index, char ch)

: 지정된 위치(index)의 문자를 주어진 문자(ch)로 바꾼다.

StringBuffer sb = new StringBuffer("0123456");
sb.setCharAt(5, 'a');

sb = "01234a6"

void setLength(int newLength)

: 지정된 길이로 문자열의 길이를 변경한다. 길이를 늘리는 경우 나머지 빈 공간을 널문자 '\u0000'로 채운다.

StringBuffer sb = new StringBuffer("0123456");
sb.setLength(5);

StringBuffer sb2 = new StringBuffer("0123456");
sb2.setLength(10);

sb = "01234"
sb2 = "0123456 "

String toString()

: StringBuffer 인스턴스의 문자열을 String으로 변환

StringBuffer sb = new StringBuffer("0123456");
String str = sb.toString();

str = "0123456"

String substring(int start, int end)

: 지정된 범위 내의 문자열을 String으로 뽑아서 반환한다. end를 안쓰면 start 부터 끝까지 뽑아서 반환한다.

StringBuffer sb = new StringBuffer("0123456");
String str = sb.substring(3);
String str2 = sb.substring(3, 5);

str = "3456"
str2 = "34"


📌StringBuilder

StringBuffer는 동기화되어 있다. 멀티 쓰레드에 안전(thread-safe)

멀티 쓰레드 프로그램이 아닌 경우, 동기화는 불필요한 성능이 저하된다. 이 때, StringBuffer 대신 StringBuilder를 사용하면 성능이 향상된다.

  • StringBuilder는 동기화 처리가 안되는 것 빼고 모든 것이 StringBuffer와 똑같다.

📌Math 클래스

수학 관련된 static 메서드의 집합

round()로 원하는 소수점 아래 세 번째 자리에서 반올림하기

  1. 원래 값에 100을 곱한다.
    90.7552 * 100 = 9075.52

  2. Math.round() 사용 (round()는 원래 소수점 아래 첫 번째 자리에서 반올림)
    Math.round(9075.52) = 9076

  3. 다시 100.0으로 나눈다.
    9076 / 100.0 = 90.76

Math 클래스의 메서드

static double or float or int or long abs(double or float or int or long a)

: 주어진 값의 절대값을 반환한다.

int i = Math.abs(-10);
double d = Math.abs(-10.0);

i = 10
d = 10.0

static double ceil(double d)

: 주어진 값을 올림하여 반환한다.

double d = Math.ceil(10.1);
double d2 = Math.ceil(-10.1);
double d3 = Math.ceil(10.005);

d = 11.0
d2 = -10.0
d3 = 11.0

static double floor(double d)

: 주어진 값을 버림하여 반환한다.

double d = Math.floor(10.1);
double d2 = Math.floor(-10.1);
double d3 = Math.floor(10.005);

d = 10.0
d2 = -11.0
d3 = 10.0

static double or float or int or long max(double or float or int or long a, double or float or int or long b)

: 주어진 두 값을 비교하여 큰 값을 반환한다.

int i = Math.max(-10, -9);
double d = Math.max(9.5, 9.6);

i = -9
d = 9.6

static double or float or int or long min(double or float or int or long a, double or float or int or long b)

: 주어진 두 값을 비교하여 작은 값을 반환한다.

int i = Math.min(-10, -9);
double d = Math.min(9.5, 9.6);

i = -10
d = 9.5

static double random()

: 0.0 ~ 1.0 범위의 임의이 double 값을 반환한다. 1.0은 포함 x

double d = Math.random();
int i = (int)(Math.random() * 10) + 1;

0.0 <= d < 1.0
1 <= i < 11

static double rint(double d)

: 주어진 double 값과 가장 가까운 정수 값을 double 형으로 반환한다. 단, 두 정수의 가운데 있는 값(1.5, 2.5 등)은 짝수를 반환한다.

double d = Math.rint(1.2);
double d2 = Math.rint(1.6);
double d3 = Math.rint(2.5);
double d4 = Math.rint(3.5);

d = 1.0
d2 = 2.0
d3 = 2.0
d4 = 4.0

static long round(double d or float f)

: 소수점 첫 번째 자리에서 반올림한 정수값(long)을 반환한다. 단, 두 정수의 가운데 있는 값은 항상 큰 값을 반환한다.

long l = Math.round(1.2);
long l2 = Math.round(1.6);
long l3 = Math.round(2.5);
long l4 = Math.round(3.5);
double d = 90.7557;
double d2 = Math.round(d * 1000) / 1000.0;

l = 1
l2 = 2
l3 = 3
l4 = 4
d = 90.7557
d2 = 90.756

  • Math.round(d * 1000) / 1000.0; : 소수점 네 번째 자리에서 반올림하는 방법

0개의 댓글