본문 바로가기
알고리즘/개념

String to Char & Char to String

by Dr.섭도 2023. 11. 29.

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 에 대해 깊게 파고들어 보자~!

[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  

(참고)

[Java 07] 문자형 - char

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를 쓰는 방법을 익혀둡시다


(참고)

[Java] String < - > char 변환 총 정리

'알고리즘 > 개념' 카테고리의 다른 글

[C++] 문자열 치환하기  (0) 2024.07.12
[C++] C++에서 입력 받기  (0) 2024.07.08