JAVA_48_String 클래스

31684 단어 JavaJava
  • 문자열 생성 방법(리터럴vs.new)

  • String.equals() : 내용비교

  • 문자열, 문자 초기화

  • 인덱스 검색(문자 반환)
    : charAt()

  • 문자열 비교
    : compareTo(), equals(), equalsIgnoreCase()

  • 문자열 결합
    : + , concat(), join()

  • 문자열 검색
    : contains(), endsWith(), startsWith(), indexOf(), lastIndexOf()

  • 문자 검색
    : indexOf(), lastIndexOf()

  • 길이
    : length()

  • 문자열 분할
    : split(), substring()

  • 대문자/소문자로
    : toUpperCase(), toLowerCase()

  • 공백제거
    : trim()

  • 문자열로 변환
    : + "" , valueOf()

String 클래스

  • 문자열을 다루기 위한 클래스

  • = 데이터(char[], 문자배열) + 메소드(문자열 관련)

  • 내용을 변경할 수 없는 클래스


String a = "a";
String b = "b";
a = a+b;

a = a+b;


(X)

(O)

  • ✨따라서 덧셈 연산자(+)를 이용한 문자열 결합은 성능이 떨어진다.

  • ✨✨문자열 결합이나 변경이 잦다면, StringBuffer이용!!!

    • 내용 변경가능한 클래스이기 때문

문자열 생성방법 비교

1) 문자열 리터럴

String s1 = "aaa";	//문자열 리터럴 "aaa" 객체의 !주소!가 참조변수 s1에 저장됨
String s2 = "aaa";	//문자열 리터럴 "aaa" 객체의 !주소!가 참조변수 s2에 저장됨
  • 문자열 리터럴은 프로그램 실행 시 자동으로 생성된다.
    -> constant pool(상수 저장소)에 저장

  • 우리가 따로 만들지 않더라도 자동으로 객체가 생성됨!

  • 같은 내용의 문자열의 리터럴은 ✨하나만 만들어진다.
    -> ✨✨여러 참조변수가 공유

따라서

s1 == s2? true;
//0x100 == 0x100 니까

s1.eqauls(s2)? true;
//String의 equals()는 주소비교가 아니라 !내용비교!

2) new 연산자

String s1 = new String("aaa");	//새로운 String인스턴스 생성
String s2 = new String("aaa");	//새로운 String인스턴스 생성

  • 서로 다른 객체 가리킴

따라서

s1 == s2? false;
//0x100 == 0x200 니까

s1.eqauls(s2)? true;
//String의 equals()는 주소비교가 아니라 !내용비교!


주의!

== 연산자Object의 equals()String의 equals()
주소비교주소비교내용비교
..Object의 equals()를 오버라이딩 한 것


빈 문자열

  • 내용이 없는 문자열

  • 크기가 0인 char형 배열을 저장하는 문자열

  • 길이가 0인 char배열

char[] chArr = char[0];

  • 길이가 0인 int배열

int[] iArr = {};

  • ✨문자char와 문자열String의 초기화

(X) 비권장

String s = null;
char c = '\u0000';
//이건 유니코드
String s1 = new String("");
String s2 = new String("");
String s3 = new String("");

(O) ✨✨✨

char c = ' ';
//공백으로 초기화
String s1 = "";
String s2 = "";
String s3 = "";
  • 메모리 낭비가 없다.


char[] ⇄ String

  • 문자 배열 ⇄ 문자열

char[] → String

String(char[] value)

  • 생성자
char[] c = {'h', 'e', 'l', 'l', 'o'};
String s = new String(c);

->

s = "hello"

String → char[]

toCharArray()



StringBuffer ⇄ String

StringBuffer → String

String(StringBuffer sbf)

  • 생성자
StringBuffer sbf = new StringBuffer("hello");
String s = new String(sbf);

->

s = "hello"

String → StringBuffer

...나중에...



charAt()

char charAt(int index)

  • 문자열의 인덱스에 해당하는 문자 뱉는 메소드
String s = "hello";
char c = s.charAt(1);

->

c = 'e'


compareTo()

int compareTo(String str)

  • 문자열끼리 사전순서로 비교하여 같으면 0, ✨왼쪽항이 더빠르면 -1, 더 느리면 1
int a = "aaa".compareTo("bbb");

->

a = -1

너무 많다.

필요한 게 있으면

String클래스


concat()

String concat(String str)

  • 문자열 바로 뒤에 문자열 결합
String s1 = "hello";
String s2 = s1.concat(" world");

->

s2 = "hello world"


contains()

boolean contains(CharSequence s)

  • 지정된 문자열s가 포함되어 있으면 true, 아니면 false

  • CharSequence : 인터페이스
    -> 문자배열을 다루는 클래스들은 공통조상이 없으므로, 인터페이스인 CharSequence를 공통조상처럼 함으로써 문자배열 클래스들을 한꺼번에 다룰 수 있게 된다!

String s = "abcdef";
boolean b = s.contains("bc");

->

b = true


endsWith(), startsWith()

boolean endsWith(String suffix)

  • 지정된 문자열suffix로 끝나는지 검사 (true/fasle)
String s = "Hello.txt";
boolean b = s.endsWith("txt");

->

b = true

boolean startsWith(String prefix)

  • 지정된 문자열prefix로 시작하는지 검사(true/fasle)
String s = "java.lang.Object";
boolean b = s.startsWith("java");
boolean b2 = s.startsWith("lang");

->

b = true
b2 = false


equals()

boolean eqauls(Object obj)

  • obj와 문자열 비교하여 같으면 true, 다르면 false

  • Object클래스의 equals() 오버라이딩



equalsIgnoreCase()

boolean equalsIgnoreCase(String str)

  • 대소문자 구분없이 문자열 비교
String s = "HELLO";
boolean b = s.equalsIgnoreCase("helLO");

->

b = true


indexOf(int c)

int indexof(int ch)

  • 문자ch가 해당 문자열에 존재하는지 확인하여 위치(0 ~) 반환
  • 존재하지 않으면 -1 반환
String s = "Hello";
int idx1 = s.indexOf('o');
int idx2 = s.indexOf('k');

->

idx1 = 4
idx2 = -1


indexOf(int, int)

int indexOf(int ch, int pos)

  • 문자열의 지정된 위치pos부터 시작하여 주어진 문자ch가 존재하는지 확인하여 위치(0 ~) 반환
  • 존재하지 않으면 -1 반환
  • pos = 0이면 처음부터 조사
String s = "Hello";
int idx1 = s.indexOf('e', 1);
int idx2 = s.indexOf('e', 2);

->

idx1 = 1
idx2 = -1


indexOf(String)

int indexOf(String str)

  • 주어진 문자열str이 존재하는지 시작위치(0 ~) 반환
  • 존재하지 않으면 -1 반환
String s = "ABCDE";
int idx = s.indexOf("CD");

->

idx = 2


lastIndexOf(int c)

int lastIndexOf(int ch)

  • 뒤에서 찾기

lastIndexOf(String)

int lastIndexOf(String str)

  • 뒤에서 찾기


length()

int length(String str)

  • 문자열의 길이 반환


split(String)

String[] split(String regex)

  • 문자열을 지정된 분리자regex로 나눠 ✨문자열배열에 저장해 반환

  • regex(Regular Expression) : 정규식

String animals = "dog, cat, bear";
String[] sArr = animals.split(",");

->

sArr[0] = "dog"
sArr[1] = "cat"
sArr[2] = "bear"


split(String, int)

String[] split(String regex, int limit)

    • ✨문자열 전체를 지정된 수limit를 배열의 길이로 한다.
String animals = "dog, cat, bear";
String sArr[] = animals.split(",", 2);

->

sArr[0] = "dog"
sArr[1] = "car, bear";


substring()

String substring(int begin)

  • 주어진 시작위치begin부터 끝까지 포함된 문자열 얻기

String substring(int begin, int end)

  • 주어진 시작위치begin부터 끝위치 ✨end - 1✨까지 포함된 문자열 얻기
String s = "java.lang.Object";
String c = s.substring(10);	//index=10부터 끝까지
String p = s.substring(5, 9);	//index=5 ~ 8 까지

->

c = "Object"
p = "lang"


toUpperCase()

String toUpperCase()

  • 대문자로

toLowerCase()

String toLowerCase()

  • 소문자로


trim()

String trim()

  • 문자열의 왼쪽끝과 오른쪽끝(처음과 끝)에 있는 공백 제거한 문자열 반환
String s = "  hello world  ";
String s1 = s.trim();

->

s1 = "hello world"


valueOf()

static String valueOf(기본타입 기본형)
static String valueOf(Object obj)

  • 지정된 값을 문자열로 변환하여 반환
  • 참조변수의 경우 ✨toString()을 호출한 결과 반환
  • 각 리퍼클래스마다 다 있다! JAVA_06 참고
java.util.Date dd = new java.util.Date();
String date = String.valueOf(dd);

->

date = "Wed Jan 27 21:26:29 KST 2016"


join()

String join(String regex, String[] arr)

  • 해당 배열의 문자열arr을 구분자regex로 구분해서 결합, 문자열 반환
  • 구분자는 제일 마지막에 수행
  • 해당 ✨✨문자열배열을 매개변수로
  • 구분자를 안 넣고 그냥 결합을 원하면 regex == "" 빈문자열!!
  • 여러 문자열도 결합 가능하다. 구분자를 제외한 나머지는 다 결합하는 문자열들!
String animals = "dog, cat, bear";
String[] sArr = animals.split(",");

String str = String.join("-", sArr);

String s1 = "100";
String s2 = "200";

String str2 = String.join("!", s1, "+", s2, "=");
//"s1+s2="를 ! 로 구분짓기
String str3 = String.join("", s1, "+", s2, "=");

->

str = "dog-cat-bear"

str2 = "100!+!200!="

str3 = "100+200="



Ref

좋은 웹페이지 즐겨찾기