Made by Minseokism

Java String Methods

String은 Reference Type이지만 기본형 처럼 사용합니다.
literal 방식(Primitive Type을 사용하듯이)으로 선언하기도 하고, new 연산자를 이용해서 새로운 객체를 만든 후 사용하기도 합니다. 두가지 방법으로 생성된 문자열은 같아보이지만, 차이가 있습니다.
밑에 예제의 결과를 보면 알 수 있듯이 literal 방식으로 생성을 하게되면 string pool 이라는 곳에 저장하고 다음에 다시 동일한 문자열이 선언될때는 cache 된 문자열을 return 합니다. 객체를 생성하는 방법은 같은 문자열이라도 계속 새로 생성해야되기 때문에 메모리를 낭비하게됩니다. 그러므로 String을 사용할 때에는 literal 방식으로 선언하는 것이 좋습니다.

String t1 = "minseok";
String t2 = "minseok";
String t3 = new String("minseok");

t1==t2; // result is true
t1==t3; // result is false

String Class는 유용한 메소드들이 많이있는데 알아보도록 하겠습니다.

Method List


chatAt - 지정된 인덱스에 있는 char값을 return합니다.
compareTo - 두 개의 String을 사전적으로 비교합니다.
concat - 지정된 문자열을 이 문자열의 끝에 연결합니다.
contains - 지정된 문자열을 포함하고 있는 경우에만 true를 리턴합니다.
contentEquals - 지정된 문자열과 순서가 같을 때에만 true를 return합니다.
copyValueOf - 지정된 배열 내의 문자 시퀀스를 나타내는 문자열을 반환합니다.
endsWith, startWith - 문자열이 지정된 접미어로 끝나는 지, 접두어로 시작하는 지 여부를 검사합니다.
equals - 문자열을 지정된 객체와 비교합니다.
format - 지정된 위치에 값을 대입해서 문자열을 만들어내는 용도로 사용합니다.
indexOf, lastIndexOf - 문자열 내에서 지정된 Charater가 최초로 출현하는 위치의 인덱스를 return 합니다.
matches - 문자열이 지정된 정규표현에 일치할지 어떨지를 판단해서 boolean값을 return 합니다.
replace, replaceAll, replaceFirst - 문자열내에 일부를 원하는 문자열로 바꿉니다.
split - 문자열을 정규표현(특정 구분자)에 따라 String[]로 return 합니다.
substring - 문자열을 시작점(지정)부터 끝점(지정)까지 잘라서 return 합니다.


charAt

public char charAt(int index)

소스

String str = "abc123";
str.charAt(2); // result is 'c';
str.charAt(6); // java.lang.StringIndexOutOfBoundsException 발생

compareTo

public int compareTo(String anotherString)

반환되는 값      설명
---------------------------------------------------------------------------------
0                두 문자열이 같음
r>0              r = string1.compareTo(string2) 일 경우 string1 > string2 일경우
r<0              r = string1.compareTo(string2) 일 경우 string1 < string2 일경우

소스

String a = "abc";
String b = "abc";
String c = "bcd";
String d = "abcde";

a.compareTo(b); // result is 0;
a.compareTo(c); // result is -1;
a.compareTo(d); // result is -2;
c.compareTo(a); // result is 1;
d.compareTo(a); // result is 2;

설명

1. a.compareTo(b)의 경우 (문자열이 같을 떄) a.charAt(0) - b.charAt(0) = 0  
2. a.compareTo(c)의 경우 (글자수만 같을 때) a.charAt(0) - c.charAt(0) = 'a' - 'b' = -1
3. a.compareTo(d)의 경우 (글자수도 다를 때) a.length() - d.length() = 3 - 5 = -2
4. c.compareTo(a)의 경우 (글자수만 같을 때) c.charAt(0) - a.charAt(0) = 'b' - 'a' = 1
5. d.compareTo(a)의 경우 (글자수도 다를 때) d.length() - a.length() = 5 - 3 = 2

concat

:/} `public String concat(String str)` - 지정된 문자열을 이 문자열의 끝에 연결합니다. - 지정된 문자열의 길이가 0일 경우 기존 String 값을 return합니다. ```java "cares".concat("s") // result is "caress" "to".concat("get").concat("her") // result is "together" ``` --- {::nomarkdown}

contains

public boolean contains(CharSequence c)

String str = "hearth Stone";
StringBuilder sb = new StringBuilder();
sb.append("hearth");
StringBuffer sbf = new StringBuffer();
sbf.append("stone");

str.contains(sb); // result is true
str.contains(sbf); // result is false 대소문자 구별
str.contains("h St"); // result is true

contentEquals

public boolean contentEquals(CharSequence c)
public boolean contentEquals(StringBuffer sb)

String str1 = "Not immutable";
String str2 = "Strings are immutable";
StringBuffer str3 = new StringBuffer("Not immutable");

str1.contentEquals(str3); // result is true
str2.contentEquals(str3); // result is false

copyValueOf

public static String copyValueOf(char[] data)
public static String copyValueOf(char[] data, int offset, int count)

char[] charArr = {'h', 'e', 'a', 'r', 't', 'h', 's', 't', 'o', 'n', 'e'};

str.copyValueOf(charArr); // result is "hearthstone"
strcopyValueOf(charArr, 2 , 6) // result is "arthst"

endsWith, startWith

public boolean endsWith(String suffix)
public boolean startWith(String prefix)

String str = "hearth stone";

str.endsWith("one"); // result is true;
str.endsWith("stone"); // result is true;
str.endsWith(""); //result is true;
str.endsWith(" "); //result is false;

str.startWith("hearth"); // result is ture;
str.startWith("hea"); // result is true;
str.startWith(""); // result is true;

equals

public boolean equals(Object anObject)

String str = "hearth stone";
String str2 = "hearth stone";
String str3 = "hearth";
char[] arr = {'h','e','a','r','t','h'};

StringBuilder sb = new StringBuilder();
sb.append(str2);

str.equals(str2); // result is true;
str3.equals(String.copyValueOf(arr)); // result is true;
str2.equals(sb); // result is false;
str.equals(sb.toString()); // result is true;

format

public static String format(Locale l, String format, Object... args)

1. 문자열 format

String.format("%s %s.", "Heart", "Stone");

result: 
Hearth Stone
- [width] 옵션
String.format("%10s%10s", "Hearth", "Stone");
String.format("%3s %3s.", "Heart", "Stone");

result:
    Hearth,     Stone
Hearth Stone.
- [argument_index$] 옵션
String.format("%2$s %1$s", "Heart", "Stone");
String.format("%1$s %1$s %s %s", "Heart", "Stone");

result:
Stone Hearth
Hearth Hearth Hearth Stone
- [flags] 옵션
String.format("%-10s%-10s", "Hearth", "Stone");
String.format("%-3s%-3s", "Hearth", "Stone");

result:
Hearth    Stone     
Heart Stone.

2. 정수 format

String.format("%d, %d", 12345, 67890);
String.format("%10d, %10d", 12345, 67890); 
String.format("%2$10d, %1$10d", 12345, 67890); 
String.format("%-10d, %-10d", 12345, 67890); 
String.format("%2$-10d, %1$-10d", 12345, 67890);
String.format("%010d, %010d", 12345, 67890); 
String.format("%+10d, %+10d", 100, -100); 
String.format("%(10d, %(10d", 100, -100); 
String.format("%,10d, %10d", 10000, -10000); 

result:
12345, 67890
     12345,      67890
     67890,      12345
12345     , 67890     
67890     , 12345     
0000012345, 0000067890
      +100,       -100
       100,      (100)
    10,000,     -10000

3. 16진수 format

String.format("%10x%10x", 2047, 2047);
String.format("%10X%10X", 2047, 2047);

result:
       7ff       7ff
       7FF       7FF

4. 8진수 format

String.format("%10o%10o", 2047, 2047);

result:
      3777      3777

5. 실수 format

String.format("%f, %f", 3.14523, 0.666455);
String.format("%.2f, %.4f", 3.14523, 0.666455);
String.format("%10.2f%10.2f", 100000.999f, 200000.999f);

result:
3.145230, 0.666455
3.15, 0.6665
 100001.00 200001.00

indexOf, lastIndexOf

public int indexOf(int ch)
public int indexOf(int ch, int fromIndex)
public int indexOf(String str)
public int indexOf(String str, int fromIndex)

String str1 = "AbcdeA";
String str2 = "0123453";

str1.indexOf('A'); // result is "0"
str1.indexOf('A', 4); // result is "5"
str2.indexOf("3"); // result is "3"
str2.indexOf("3", 5); // result is "6"

matches

public boolean matches(String regex)

String str1 = "012345";
String str2 = "abcdef";
String str3 = "messi@real.com";

str1.matches("^[0-9]+$"); // return is true
str2.matches("^[a-zA-Z]{3,7}$"); // return is true
str3.matches("^[\\w]+@?[\\w]+.?[\\w]+$"); // return is true


replace, replaceAll, replaceFirst

public String replace(char oldChar, char newChar)
public String replace(CharSequence target, CharSequence replacement);
public String replaceAll(String regex, String replacement)
public String replaceFirst(String regex, String replacement)

String str1 = "ABCDEAFGAAB";

String str2 = str1.replace('A', '?'); // result is "?BCDE?FG??B"
String str3 = str1.replace("A", "에이"); // result is "에이BCDE에이FG에이에이B"
String str4 = str1.replaceAll("AB", "영어"); // result is "영어CDEAFGA영어"
String str5 = str1.replaceFirst("AB", "영어"); // result is "영어CDEAFGAAB"
String str6 = str1.replaceAll("^[A-Z]+", "123"); // result is "123"

split

public String[] split(String regex)
public String[] split(String regex, int limit)

String str1 = "abc:bbc:cbc:dbc";
String str2 = "abc:bbc,cbc:dbc,ebc";
String str3 = "abc"

str1.split(":"); // result is {"abc, "bbc", "cbc", dbc"}
str1.split(":", 2); // result is {"abc", "bbc:cbc:dbc}
str3.split(":|,"); // result is {"abc, "bbc", "cbc", dbc", "ebc"}
str4.aplit(":"); // result is {"abc"}

substring

public String substring(int beginIndex)
public String substring(int beginIndex, int endIndex)

String str1 = "unhappy"; 
String str2 = "Sweet Christmas";
String str3 = "McDonald Duck Burger";

str1.substring(2); // result is "happy"
str2.substring(6); // result is "Christmas"
str1.substring(7); // result is "" (empty)
str3.substring(2, 13); // result is "Donald Duck"

  1. CharSequence는 인터페이스입니다. 이 인터페이스를 구현한 클래스로는 CharBuffer, String, StringBuffer, StringBuilder가 있으며 StringBuffer나 StringBuilder로 생성한 객체를 전달할 때 사용됩니다. StringBuffer나 StringBuilder로 값을 만든 후 굳이 toString을 수행하여 필요 없는 객체를 만들어서 넘겨주기 보다는 CharSequence로 받아서 처리하는 것이 메모리 효율에 더 좋습니다. 


Share this: