728x90
Package
- java.lang.Object
- java.lang.String
String이란?
*String은 프로그램 작성시 가장 기본이 되며 가장 많이 사용하는 클래스다.
The String class represents character strings. All string literals in Java programs, such as "abc", are implemented as instances of this class.
String Class는 문자열(char)을 대표한다.
모든 자바 프로그램의 문자열 리터럴은, 이 클래스의 인스턴스로 "abc"와 같이 구현된다.
ex) String a = "Example";
상수 : 변하지 않는 변수 == 위 예시의 a 의미
리터럴 : 변하지 않는 데이터 == 위 예시의 "Example" 의미
Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared
문자열은 상수다.
생성되고 난 뒤에는 값이 바뀔 수 없다.
문자열 버퍼는 변경 가능한 문자열을 지원한다.
스트링 객체는 변경 할 수 없기 때문에 공유할 수 있다.
즉, String은 불변 객체이다.
자바에서 String을 사용하면서 +를 사용하는데, 이것은 문자열이 더해진다는 의미가 아니라 두 개의 문자를 합쳐 새로운 String 객체를 생성한다는 뜻이다.
만약 문자열을 더하고 빼는 행위가 많다면 StringBuilder 또는 StringBuffer를 사용하는 것이 메모리 관리에 효율적이다.
String Class Constructor
생성자에 대입되는 값은 다음과 같다
- byte 배열
- char 배열
- int 배열
- 기본 문자열
변수 선언
String data = "abcde";
String(String original) : String 기본 생성자
String str = new String(data);
// abcde
String(byte[] bytes) : byte배열 생성자
String strByte = new String("바이트 파라미터".getBytes());
// 바이트 파라미터
String(byte[] bytes, int offset, int length) : byte 지정 위치 문자열 생성자
String strByteOfflen = new String(data.getBytes(),1,2);
// bc
String(byte[] bytes, String charsetName) : byte charset 문자열로 지정 생성자
try {
String strByteCharName2 = new String(data.getBytes(), "UTF-8");
} catch (UnsupportedEncodingException e) {e.printStackTrace();}
// abcde
또는 다음과 같이 사용할 수 있다.
String strByteCharName = new String(data.getBytes(), StandardCharsets.UTF_8);
// abcde
charset
사람의 언어가 국가마다 다르다.
즉 문자는 어떤 언어는 수많은 종류가 있고 또 어떤 언어는 간단하게 나타낼 수 있는 다양한 언어가 있기 때문에 데이터를 쓰고 읽음에 있어서 표현 가능한 byte 수가 다르다, 이러한 차이로 인해 프로그램상 문자를 작성하고 데이터를 주고 받음에 있어서 컴퓨터가 읽을 수 있도록 데이터로 변환해서 보내고/받은 데이터를 읽는 종류(방법)은 다양할 수 있다.
이를 지정 하는 것이 charset 이며, 보통 "UTF-8"을 주로 공통되게 사용한다.
UTF-8은 유니코드 한 문자를 나타내기 위해 1바이트에서 4바이트까지 사용한다.
String(byte[] bytes, Charset charset) : byte charset을 이용한 생성자
Charset charset = Charset.defaultCharset();
String strByteCharset = new String(data.getBytes(), charset);
// abcde
// charset == UTF-8
String(char[] chars) : char 배열 생성자
char[] data2 = {'a', 'b', 'c', 'd', 'e'};
String strCharOffCount = new String(data2);
// abcde
String(int[] ints, int offset, int count) : int 배열 생성자 (ASCII 코드)
int[] data3 = {97,98,99,100,101,102};
String strIntOffCount = new String(data3,2,3);
// cde
int[]에 대해서는 ASCII 코드로 읽고 offset 부터 ~ count 갯수만큼 나타낸다
String(StringBuffer) or String(StringBuilder) : Buffer와 Builder를 이용한 생성자
StringBuffer stringBuffer = new StringBuffer("스트링버퍼");
StringBuilder stringBuilder = new StringBuilder("스트링빌더");
// 스트링버퍼
// 스트링빌더
String Class Method
Static Method
String.copyValueOf() : 문자 배열 → 문자열 값으로 복사한다.
char[] data = "abcde".toCharArray();
String strCopyValueOf = String.copyValueOf(data);
// abcde
String.format() : 지정된 형식을 반환
String strFormat = String.format("스트링 포맷 = %s %d %s","String Format Test",1,"번째");
// 스트링 포맷 = String Format Test 1 번째
String.join() : 문자열을 구분기호로 나눠 합친 데이터를 반환한다
String delimeter = ", ";
CharSequence data1 = "abc";
String strJoin = String.join(delimeter, data1, "def");
// abc, def
String.valueOf() : 각종 다른 타입의 데이터를 String으로 형변환한다.
String booleanValue = String.valueOf(true);
String charValue1 = String.valueOf('a');
String charValue2 = String.valueOf(new char[]{'a', 'b', 'c'},1,2);
String doubleValue = String.valueOf(3.14);
String floatValue = String.valueOf(0.01f);
String intValue = String.valueOf(1000);
String longValue = String.valueOf(100000000L);
Object obj = new Object();
obj = "Object";
String objectValue = String.valueOf(obj);
// true
// a
// bc
// 3.14
// 0.01
// 1000
// 100000000
// Object
Instance Method
변수 선언
String data = "abcde";
charAt(int index) : index 위치 문자 반환
char strCharAt = data.charAt(0);
// a
chars() : IntStream 반환
IntStream is = data.chars();
Arrays.toString(is.toArray())
// [97, 98, 99, 100, 101]
codePointAt(int index) : 지정된 인덱스를 문자(유니코드)로 반환한다 (0부터 시작)
int strCodePointAt = data.codePointAt(0);
// 97
codePointBefore(int index) : 지정된 인덱스 이전의 문자를 반환한다 (1 입력하면 0번째의 데이터를 가져온다)
int strCodePointBefore = data.codePointBefore(5);
// 101
codePointCount(int beginIndex, int endIndex) : 지정된 인덱스 텍스트의 개수를 반환한다
int strCodePointCount = data.codePointCount(0,1);
// 1
compareTo(String anotherString) : 두개의 문자열을 사전순으로 비교한다
- ASCII 코드를 기준
- 비교하는 대상이 더 큰 숫자일 경우 음수로 표현되고
- 비교하는 대상이 같은 경우 0으로 표현되고
- 비교하는 대상이 더 작은 숫자일 경우 양수로 표현된다.
int strCompare = data.compareTo("ABCDE");
// 32
compareToIgnoreCase(String str) : 두개의 문자열을 사전순으로 비교하고, 대소문자의 차이를 무시한다.
int strCompareIgnore = data.compareToIgnoreCase("ABCDE");
// 0
concat(String str) : 지정된 문자열을 이 문자열의 끝에 연결한다.
String strConcat = data.concat("fghij");
// abcdefghij
contains(CharSequence s) : CharSequence가 포함 여부를 확인하여 참거짓을 반환한다.
boolean strContains = data.contains("bc");
// true
contentEquals(CharSequence cs) : 지정된 문자열과 char 시퀀스가 같을 경우 true가 반환한다.
- equals()는 문자열 객체만을 비교하지만 contentEquals는 equals() + StringBuffer, StringBuilder 등등과의 추가 비교 수행이 가능하다.
StringBuilder stringBuilder = new StringBuilder("abcde");
boolean strContentEquals = data.contentEquals("abcde");
data.contentEquals(stringBuilder)
// true
startsWith(String prefix) : 이 문자열의 맨 앞 지정한 문자열이 같으면 true를 반환한다
boolean strStartWith = data.startsWith("a");
// true
endWith(String suffix) : 이 문자열의 끝과 지정한 문자열이 같으면 true를 반환한다.
boolean strEndsWith = data.endsWith("de");
// true
equals(Object anObject) : 지정된 객체에 대해 문자열을 비교한다
boolean strEquals = data.equals("abcde");
// true
equalsIgnoreCase(String anotherString) : 지정된 객체에 대해 문자열을 비교하고, 대소문자 구분을 하지 않는다.
boolean strEqualsIgnore = data.equalsIgnoreCase("ABCDE");
// true
getBytes() : 이 문자열을 바이트 시퀀스로 인코딩하고 새 바이트 배열에 저장한다
byte[] strGetBytes = data.getBytes();
Arrays.toString(strGetBytes)
// [97, 98, 99, 100, 101]
hashCode() : 이 문자열의 해시코드를 반환한다
int strHash = data.hashCode();
// 92599395
indexOf(String str) : 이 문자열 내에서 지정한 문자가 처음 나타나는 인덱스를 반환한다.
- 찾는 문자가 없을 경우 -1을 반환한다.
int strIndex1 = data.indexOf("c");
int strIndex2 = data.indexOf(4);
// 2
// -1
indexOf(String str, int fromIndex) : 지정한 인덱스부터 찾는다
int strIndex3 = data.indexOf("b",2);
// -1
lastIndexOf(String str) : 이 문자열 내에서 지정한 문자가 뒤에서 부터 처음 나타나는 인덱스를 반환한다.
int strLastIndex = data.lastIndexOf("e");
// 4
intern() : 해당 문자열이 이미 Pool에 있는지 .equals() 비교를 통해 확인하고 만약 Pool에 존재하면 객체의 참조값을 반환 받고 만약 Pool에 존재하지 않는다면 Pool에 해당 문자열(객체)을 추가하고 이 객체에 대한 참조가 반환된다.
String strIntern = data.intern();
// abcde
isBlank() : 공백인지 확인한다.
boolean strIsBlank = " ".isBlank();
// true
isEmpty() : 비어있는지 확인한다. (공백 + length 문자열의 길이)
boolean strIsEmpty = "".isEmpty();
// true
length() : 문자열의 길이를 반환한다
int strLength = data.length();
// 5
lines() : \n 또는 \r 행 종결자로 구분하여 스트림으로 반환한다
Stream<String> strStream = "lines \n Unix용 \r Mac용".lines();
Arrays.toString(strStream.toArray())
// [lines , Unix용 , Mac용]
matches(String regex) : pattern 정규식을 이용해 확인한다.
boolean strMatches = data.matches("abcde");
// true
offsetByCodePoints(int index, int codePointOffset) : 지정된 인덱스에서 코드포인트 만큼 오프셋된 인덱스 반환
- 오프셋이란, 시작지점부터의 변위차를 뜻한다. 1번째 인덱스 +4 = 5 번째.
- 즉, 이 예제에서는 ( 4 )가 오프셋이다
int strOffsetByCodePoints = data.offsetByCodePoints(1,4);
// 5
regionMatches(int toffset, String other, int ooffset, int len) : 두 문자열의 영역이 같은지 테스트한다.
- toffset = 해당 문자열의 오프셋 번호, other = 비교할 문자열, ooffset = 비교할 문자열의 오프셋 번호, len = 갯수
boolean strRegionMatchesInt = data.regionMatches(2,"ccccc",1,1);
// true
repeat(int count) : 해당 문자열을 반복하여 새 문자열을 만든다.
String strRepeat = data.repeat(5);
// abcdeabcdeabcdeabcdeabcde
replace(String oldChar, String replacement) : oldChar 문자열이 있는지 조회하고 replacement로 바꾼다.
- 맨 앞에서 검색된 한 개의 문자만 바꾼다
String strReplace = data.replace("a","change,");
// change,bcde
replaceAll(String regex, String replacement) : regex 문자열을 조회하고 모두 replacement로 바꾼다.
String strReplaceAll = strReplace.replaceAll("e", " || ");
// chang || ,bcd ||
replaceFirst(String regex, String replacement) : 정규식을 사용하여 문자열을 변환할 수 있다.
String strReplaceFirst = strReplaceAll.replaceFirst("\\s","(test)");
// chang(test)|| ,bcd ||
split(String regex) : 입력된 문자를 기준으로 구분하여 배열로 만든다.
String[] strSplit = data.split("");
Arrays.toString(Arrays.stream(strSplit).toArray())
// [a, b, c, d, e]
split(String regex, int limit) : 배열의 공간 생성 제약 리미트를 건다
String[] strSplitLimit = data.split("",3);
Arrays.toString(Arrays.stream(strSplitLimit).toArray())
// [a, b, cde]
strip() : 모든 선행 후행의 공백이 제거된 값을 반환한다.
String strStrip = " 12 3 4 5678 ".strip();
// 12 3 4 5678
trim() : 모든 선행 후행의 공백이 제거된 값을 반환한다.
- 유니코드에 있는 공백 U+0020 보다 작은 값들 또한 공백으로 치고 삭제한다
String strTrim = " 12 3 4 5678 ".strip();
// 12 3 4 5678
stripLeading() : 모든 선행 공백이 제거된 값을 반환한다
String strStripLeading = " 1 ,3 4, 5,33 ".stripLeading();
// 1 ,3 4, 5,33
stripTrailing() : 모든 후행 공백이 제거된 값을 반환한다
String strStripTrailing = " 1 ,3 4, 5,33 ".stripTrailing();
// 1 ,3 4, 5,33
substring(int beginIndex) : 지정한 인덱스 까지를 제외한 모든 문자열을 반환한다
String strSubstring = data.substring(1);
// bcde
substring(int beginIndex, int endIndex) : 지정한 첫 문자열부터 지정한 끝 문자열까지 문자열을 반환한다
String strSubStringEnd = data.substring(1,4);
// bcd
toCharArray() : 문자열을 문자 배열로 반환한다
char[] strToCharArray = data.toCharArray();
// abcde
toUpperCase() : 대문자로 바꾼다
String strToUpperCase = data.toUpperCase();
// ABCDE
toLowerCase() : 소문자로 바꾼다
String strToLowerCase = data.toLowerCase();
// abcde
toString() : 문자열을 반환한다.
String strTostring = data.toString();
// abcde
728x90
'Programming > Backend' 카테고리의 다른 글
API 명세서 뜯어보기 - Functional interface (0) | 2021.10.02 |
---|---|
API 명세서 뜯어보기 - StringBuilder && StringBuffer Class (0) | 2021.09.28 |
자바 기초 다지기 -7 (네트워크, Java7, Java8) (0) | 2021.09.26 |
자바 기초 다지기 - 6 (Thread, Syncronized, Serializable, IO, NIO) (0) | 2021.09.13 |
자바 기초 다지기 - 5 ( Generic, Collection, Map ) (0) | 2021.09.06 |