Java의 String
Java의 String은 Java.lang
Package에 포함되어 있습니다
package stringTest;
public class StringTest {
public static void main(String[] args) {
String str1 = "Hi";
String str2 = new String("Hi");
String str3 = "Hi";
System.out.println(str1.equals(str2));
System.out.println(str1 == str2);
System.out.println(str1 == str3);
}
}
//-------------------출력 결과-------------------
// true
// false
// true
변수는 모두 stack 메모리에 생성됩니다
str1과 str3는 둘 다 String pool에 저장이 되어 있는데,
이 String pool은 HashMap의 자료구조 형태입니다
따라서 동일한 문자열의 경우 같은 주소 값을 갖게 됩니다
따라서 String 생성 시 리터럴 방식이 더 권장됩니다
new String은 Heap 메모리 내에 생성됩니다
따라서 new 연산자를 사용할 경우 계속 인스턴스가 생성됩니다
또한 Java의 String은 char의 배열 형태로 저장됩니다
(참고)
[Java] String 객체 생성 2가지 방식의 차이점 (new String vs "")
Java의 Char
char를 통한 문자 저장 방식은 3 가지가 있다
package stringTest;
public class CharTest {
public static void main(String[] args) {
char c1 = 'a'; // character
char c2 = 97; // ASCII
char c3 = '\u0061'; // unicode
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
}
}
//-------------------출력 결과-------------------
// a
// a
// a
아스키 코드의 a는 97, A는 65로 기억해 두면 편리합니다
또한 궁금해서 char를 new Character 형태로 실행해 보았다
package stringTest;
public class CharTest {
public static void main(String[] args) {
char c4 = 'h';
char c5 = new Character('h');
Character c6 = new Character('h');
System.out.println(c4);
System.out.println(c5);
System.out.println(c6);
}
}
//-------------------출력 결과-------------------
// h
// h
// h
그런데 이렇게 생성하면 new 뒤의 Character에 자동으로 취소선이 그어집니다(아마 이렇게 쓰지 않기 때문인 듯~)
그리고 String과 조금 다른 점은 new 형태로 생성하여도 비교 시 같은 주소값으로 처리가 됩니다
String에서 + 연산 시 합쳐진 문자가 출력되지만,
Charater의 연산은 정수형으로 저장됩니다
package stringTest;
public class CharTest {
public static void main(String[] args) {
char c1 = 'a'; // character
char c2 = 97; // ASCII
char c3 = '\u0061'; // unicode
System.out.println(c1+c2);
}
}
//-------------------출력 결과-------------------
// 197
package stringTest;
public class StringTest {
public static void main(String[] args) {
String str1 = "Hi";
String str2 = new String("Hi");
String str3 = "Hi";
System.out.println(str1 + str2);
}
}
//-------------------출력 결과-------------------
// HiHi
(참고)
String to Char
String to Char의 방법은 2 가지가 있습니다
charAt()
위에서 String이 저장될 때 char의 배열 형태로 저장된다고 했습니다
따라서 charAt(index)는 String으로 생성된 객체의 index를 통해 배열에서 하나 씩 뽑아오는 개념~
그리고 배열의 Index이기 때문에 0부터 시작합니다
package stringTest;
public class StringToChar {
public static void main(String[] args) {
String s = "안녕하세요";
for(int i = 0; i < s.length(); i++) {
System.out.println(s.charAt(i));
}
}
}
//-------------------출력 결과-------------------
// 안
// 녕
// 하
// 세
// 요
또한 Scanner 또는 BufferedReader와 함께 다른 방식으로 사용이 가능하다
package stringTest;
import java.util.Scanner;
public class StringToChar {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char c1 = sc.next().charAt(0);
System.out.println(c1);
}
}
//-------------------입력-------------------
// 안녕하세요
//-------------------출력 결과-------------------
// 안
package stringTest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class StringToChar3 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char c1 = br.readLine().charAt(0);
System.out.println(c1);
}
}
//-------------------입력-------------------
// 안녕하세요
//-------------------출력 결과-------------------
// 안
toCharArray()
charAt()이 String을 쪼개서 하나씩 가져오는 것이라면,
toCharArray는 아예 통째로 배열에 매칭하는 것이라 보면 됩니다
그리고, 공백도 인덱스에 포함됩니다
package stringTest;
import java.util.Arrays;
public class StringToChar4 {
public static void main(String[] args) {
String str = "안녕하세요 여러분";
char[] c = str.toCharArray();
for(char ch : c) {
System.out.print(ch);
}
System.out.println();
// 어떻게 생긴 녀석이 된 것인가?
System.out.println(Arrays.toString(c));
}
}
//-------------------출력 결과-------------------
// 안녕하세요 여러분
// [안, 녕, 하, 세, 요, , 여, 러, 분]
char to String
정상적인 방법 2가지와 이상한 방법 1가지가 있다
String.valueOf(char) 사용
String 기본 내장 함수인 valueOf로 값만 가져온다
package stringTest;
public class CharToString {
public static void main(String[] args) {
char c = 'a';
String str = "";
str = String.valueOf(c);
System.out.println(str);
System.out.println(str.getClass());
}
}
//-------------------출력 결과-------------------
// a
// class java.lang.String
Character.toString(char) 사용
이것도 간단하게 구현 가능합니다
package stringTest;
public class CharToString {
public static void main(String[] args) {
char c = 'a';
String str = Character.toString(c);
System.out.println(str);
System.out.println(str.getClass());
}
}
//-------------------출력 결과-------------------
// a
// class java.lang.String
다만 배열은 toString을 사용할 수 없습니다!
char[] ch = {’a’, ‘b’, ‘c’}
는
String str = Character.toString(ch)
가 불가능합니다
+연산 사용하기
char + ””
를 통해 String형태로 변경 가능합니다
package stringTest;
public class CharToString3 {
public static void main(String[] args) {
char c = 'a';
String str = "";
str = c+"";
System.out.println(str);
System.out.println(str.getClass());
}
}
//-------------------출력 결과-------------------
// a
// class java.lang.String
대신 글자가 길어질수록 +연산은 실행 속도가 오래 걸립니다~ 따라서 valueOf를 쓰는 방법을 익혀둡시다
(참고)
'알고리즘 > 개념' 카테고리의 다른 글
[C++] 문자열 치환하기 (0) | 2024.07.12 |
---|---|
[C++] C++에서 입력 받기 (0) | 2024.07.08 |