> For the complete documentation index, see [llms.txt](https://heunnajo.gitbook.io/java/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://heunnajo.gitbook.io/java/java.lang-package-and-useful-class/string-class.md).

# String class

* String class : data(char\[ ]) + method(related to string)

-**immutable class.**(cannot modify contents.)

```java
public final class String implements java.io.Serializable, Comparable {
    private char[ ] value;
```

-String combination that is using operator(+) is low performance.

if there are frequent String combination or modification, use mutable **StringBuffer**.

* **String Comparation**

Difference between **String str = "abc"** and **String str = new String("abc")**;

```java
//the address of string literal "abc" will be saved in str1
String str1 = "abc"; 
//the address of string literal "abc" will be saved in str2
String str2 = "abc";
//Creating new object with new address
String str3 = new String("abc");
//Creating new object with new address
String str4 = new String("abc");
```

String is immutable class so it is good to use sooner rather than latter that creating new object by "**new**".

**== compares the address**. so when compare str3 and str4, those have diffrent address, so even though they have same string, it will return false!

str1 == str2 ? **true**, str3 == str4 ? **false**

str1.equals(str2) ? **true**, str3.equals(str4) ? **true**

![Difference](https://513632279-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHGT1oKZbTmlBrsOv_R%2F-MIS7IYpBEQTb3-paede%2F-MIS8f2kJ7HmgYSMWqMi%2Fimage.png?alt=media\&token=b5c7a08e-2033-45b0-935a-8283febdd8e0)

The first one is more efficient because multiple str1, str2, ... can share the same object.

* **empty string**

```java
char[] chArr = new char[0];
int[] iArr = {};
```

1. Casting integer to string
2. Initializing string

```java
" " + 5;//"5"
String s = "";//initialize empty string
char c = '';//initialize empty space
```

* **string class constructor and method**

| Method                                                                                                                                                                                                                                                                                                                                                                                                            | Description                                                                                                                                | Example                                                                                                                                                                                                                                                                                                                                                                       |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **String**(char\[ ] value)                                                                                                                                                                                                                                                                                                                                                                                        | <p><strong>char=>String</strong></p><p>주어진 문자열(value)을 갖는 String 인스턴스를 생성한다.</p><p>(참고)String=> 문자 <strong>toCharArray()</strong>를 쓴다!</p> | <p>char\[ ] c = {'H','e','l','l','o'};</p><p>String s = new String(c);</p><p>//s = "Hello"</p>                                                                                                                                                                                                                                                                                |
| **String**(StringBuffer buf)                                                                                                                                                                                                                                                                                                                                                                                      | <p>mutable string(내용 변경 가능)</p><p>StringBuffer 인스턴스가 갖고 있는 문자열과 같은 내용의 String인스턴스를 생성한다.</p>                                               | <p>StringBuffer sb = new StringBuffer("Hello");</p><p>String s = new String(sb);</p>                                                                                                                                                                                                                                                                                          |
| **char charAt(int index)**                                                                                                                                                                                                                                                                                                                                                                                        | 지정된 위치(index)에 있는 문자를 알려준다.(index는 0부터 시작)                                                                                                 | <p>String s = "Hello";</p><p>String n = "012345";</p><p>char c = s.charAt(1);//c = 'e'</p><p>char c2 = n.charAt(1);//c2 = '1'</p>                                                                                                                                                                                                                                             |
| **int** compareTo(String str)                                                                                                                                                                                                                                                                                                                                                                                     | <p>정렬할 때 사용한다.</p><p>문자열(str)과 사전순서로 비교한다. 같으면 0, 사전순으로 이전이면 음수, 이후면 양수를 반환한다.</p>                                                         | <p>int i = "aaa".compareTo("aaa");//i = 0</p><p>int i2 = "aaa".compareTo("bbb");//i2 = -1</p><p>int i3 = "bbb".compareTo("aaa");//i3 = 1</p>                                                                                                                                                                                                                                  |
| **String** concat(String str)                                                                                                                                                                                                                                                                                                                                                                                     | 문자열(str)을 뒤에 덧붙인다.                                                                                                                         | <p>String s = "Hello";</p><p>String s2 = s.concat("World");</p>                                                                                                                                                                                                                                                                                                               |
| **boolean** contains(**CharSequence** s)                                                                                                                                                                                                                                                                                                                                                                          | <p>지정된 문자열(s)이 포함되었는지 검사한다.</p><p>CharSequence는 인터페이스이다. char\[ ]를 갖는 클래스들을 CharSequence 인터페이스로 만들었다.</p>                                  | <p>String s = "abcde";</p><p>boolean b = s.contains("bc");//b = true</p>                                                                                                                                                                                                                                                                                                      |
| **boolean** endsWith(String suffix)                                                                                                                                                                                                                                                                                                                                                                               | 지정된 문자열(suffix)로 끝나는지 검사한다.                                                                                                                | <p>String file = "Hello.txt";</p><p>boolean b = file.endsWith("txt");//b = true</p>                                                                                                                                                                                                                                                                                           |
| **boolean** equals(Object obj)                                                                                                                                                                                                                                                                                                                                                                                    | 매개변수로 받은 문자열(obj)과 String인스턴스의 문자열을 비교한다. obj가 String이 아니거나 문자열이 다르면 false를 반환한다.(대소문자 구분한다.)                                              | <p>String s = "Hello";</p><p>boolean b = s.equals("Hello");//b = true</p><p>boolean b2 = s.equals("hello");//b2 = false</p>                                                                                                                                                                                                                                                   |
| **boolean** equalsIgnoreCase(String str)                                                                                                                                                                                                                                                                                                                                                                          | 문자열과 String인스턴스의 문자열을 대소문자 구분없이 비교한다.                                                                                                      | <p>String s = "Hello";</p><p>boolean b = s.equalsIgnoreCase("HELLO");//b = true</p><p>boolean b2 = s.equalsIgnoreCase("heLLO");//b2 = false</p>                                                                                                                                                                                                                               |
| **int indexOf(int ch)**                                                                                                                                                                                                                                                                                                                                                                                           | 주어진 문자(ch)가 문자열에 존재하는지 확인하여 위치(index)를 알려준다. 못 찾으면 -1을 반환한다.(index는 0부터 시작)                                                                | <p>String s = "Hello";</p><p>int idx1 = s.indexOf('o');//idx1 = 4</p><p>int idx2 = s.indexOf('k');//idx2 = -1</p>                                                                                                                                                                                                                                                             |
| **int indexOf(int ch, int pos)**                                                                                                                                                                                                                                                                                                                                                                                  | 주어진 문자(ch)가 문자열에 존재하는지 지정된 위치(pos)부터 확인하여 위치(index)를 알려준다. 못 찾으면 -1을 반환한다. (index는 0부터 시작)                                                 | <p>String s = "Hello";</p><p>int idx1 = s.indexOf('e',0);//1</p><p>int idx2 = s.indexOf('e',2);//-1</p>                                                                                                                                                                                                                                                                       |
| **int** indexOf(String str)                                                                                                                                                                                                                                                                                                                                                                                       | 주어진 문자열이 존재하는지 확인하여 그 위치(index)를 알려준다. 없으면 -1을 반환한다.(index는 0부터 시작)                                                                        | <p>String s = "ABCDEFG";</p><p>int idx = s.indexOf("CD")//2</p>                                                                                                                                                                                                                                                                                                               |
| **int** lastIndexOf(int ch)                                                                                                                                                                                                                                                                                                                                                                                       | 지정된 문자 또는 문자코드를 문자열의 오른쪽끝에서부터 찾아서 위치(index)를 알려준다. 못 찾으면 -1을 반환한다.                                                                         | <p>String s = "java.lang.Object";</p><p>int idx1 = s.lastIndexOf('.');//9</p><p>int idx2 = s.indexOf('.');//4</p>                                                                                                                                                                                                                                                             |
| **int** lastIndexOf(String str)                                                                                                                                                                                                                                                                                                                                                                                   | 지정된 문자열을 인스턴스의 문자열 끝에서부터 찾아서 위치(index)를 알려준다. 못 찾으면 -1을 반환한다.                                                                              | <p>String s = "java.lang.java";</p><p>int idx1 = s.lastIndexOf("java");//10<br>int idx2 = s.indexOf("java");//0</p><p></p>                                                                                                                                                                                                                                                    |
| **int** length()                                                                                                                                                                                                                                                                                                                                                                                                  | <p>문자열의 길이를 알려준다.</p><p>주로 반복문 안에서 많이 쓰인다.</p>                                                                                             | <p>String s = "Hello";</p><p>int length = s.length();//5</p>                                                                                                                                                                                                                                                                                                                  |
| **String\[ ]** split(String regex)                                                                                                                                                                                                                                                                                                                                                                                | <p>regex는 Regular Expression(정규식)을 의미한다.</p><p>문자열을 지정된 분리자(regex)로 나누어 문자열 배열에 담아 반환한다.</p>                                               | <p>String animals = "dog,cat,bear";</p><p>String\[ ] arr = animals.split(",");</p><p>//arr\[0] = "dog"</p><p>//arr\[1] = "cat"</p><p>//arr\[2] = "bear"</p>                                                                                                                                                                                                                   |
| **String\[ ]** split(String regex, int limit)                                                                                                                                                                                                                                                                                                                                                                     | 문자열을 지정된 분리자(regex)로 나누어 문자열배열에 담아 봔환한다. 단, 문자열 전체를 지정된 수(limit)로 자른다.                                                                     | <p>String animals = "dog,cat,bear";</p><p>String\[ ] arr = animals.split(",",2);</p><p>//arr\[0] = "dog"</p><p>//arr\[1] = "cat,bear"</p>                                                                                                                                                                                                                                     |
| **boolean** startsWith(String prefix)                                                                                                                                                                                                                                                                                                                                                                             | 주어진 문자열(prefix)로 시작하는지 검사한다.                                                                                                               | <p>String s = "java.lang.Object";</p><p>boolean b = s.startsWith("java");//true</p><p>boolean b2 = s.startsWith("lang");//false</p>                                                                                                                                                                                                                                           |
| <p><strong>String</strong> substring(int begin)</p><p><strong>String</strong> substring(int begin, int end)</p>                                                                                                                                                                                                                                                                                                   | 주어진 시작위치(begin)부터 끝 위치(end)범위에 포함된 문자열을 얻는다. 이 때, 시작위치의 문자는 범위에 포함되지만, 끝 위치의 문자는 포함되지 않는다. (begin<= x < end)                               | <p>String s = "java.lang.Object";</p><p>String c = s.substring(10);//"Object"</p><p>String p = s.substring(5,9);//"lang"</p>                                                                                                                                                                                                                                                  |
| <p><strong>String</strong> toLowerCase()</p><p><strong>String</strong> toUpperCase()</p>                                                                                                                                                                                                                                                                                                                          | String 인스턴스에 저장되어있는 모든 문자열을 소문자/대문자로 변환하여 반환한다.                                                                                            | <p>String s = "Hello";</p><p>String s1 = s.toLowerCase();//"hello"</p><p>String s2 = s.toUpperCase();//"HELLO"</p>                                                                                                                                                                                                                                                            |
| **String** trim()                                                                                                                                                                                                                                                                                                                                                                                                 | 문자열의 왼쪽 끝과 오른쪽 끝에 있는 공백을 없앤 결과를 반환한다. 이 때 문자열 중간에 있는 공백은 제거되지 않는다.                                                                         | <p>String s = "   Hello World   ";</p><p>String s1 = s.trim();//"Hello World"</p>                                                                                                                                                                                                                                                                                             |
| <p><strong>static</strong> <strong>String</strong> valueOf(<strong>boolean</strong> b)<br>static String valueOf(<strong>char</strong> c)<br>static String valueOf(<strong>int</strong> i)<br>static String valueOf(<strong>long</strong> l)<br>static String valueOf(<strong>float</strong> f)<br>static String valueOf(<strong>double</strong> d)<br>static String valueOf(<strong>Object</strong> o)</p><p></p> | <p>지정된 값을 문자열로 변환하여 반환한다.</p><p>참조변수의 경우에는 toString()을 호출한 결과를 반환한다.</p>                                                                   | <p>String b = String.valueOf(true);//"true"</p><p>String c = String.valueOf('a');//"a"</p><p>String i = String.valueOf(100);//"100"</p><p>String l = String.valueOf(100L);//"100L"</p><p>String f = String.valueOf(10f);//"10f"<br>String d = String.valueOf(10.0);//"10.0"<br></p><p>java.util.Date dd = new java.util.Date();</p><p>String date = String.valueOf(true);</p> |

* **StringJoiner**

**join()과 StringJoiner**

**: join()은 여러 문자열 사이에 구분자를 넣어서 결합한다.**

```java
String animals = "dog,cat,bear";
String[] arr = animals.split(",");//문자열을 ','를 구분자로 나눠서 배열에 저장
String str = String.join("-",arr);//배열의 문자열을 '-'로 구분해서 결합
System.out.prinln(str);//dog-cat-bear
```

* 문자열과 기본형 간의 변환

기본형 <=> 문자열 : valueOf로 가능하다.

(참고) byte, short를 문자열로 변경할 때는 String valueOf(int i)를 사용하면 된다.&#x20;

1. 숫자를 문자열로

```java
int i = 100;

String st1 = i + "";//방법1:더 직관적인 이해.
String st2 = String.valueOf(i);//방법2:성능 향상
```

2\. 문자열을 숫자로

```java
int i = Integer.parseInt("100");
ing i2 = Integer.valueOf("100");
//원래는 반환타입이 Integer이지만 오토박싱으로 int를 써도 Integer로 자동 변환.
Integer i2 = Integer.valueOf("100")
```
