String to Char & Char to String

Montag·2023년 7월 22일
0

알고리즘 공부

목록 보기
3/3

1. 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 "")

2. 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

3. String to Char

String to Char의 방법은 2 가지가 있습니다

3-1. 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);
	}
}
//-------------------입력-------------------
// 안녕하세요
//-------------------출력 결과-------------------
// 안

3-2. 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));
		
	}
}
//-------------------출력 결과-------------------
// 안녕하세요 여러분
// [안, 녕, 하, 세, 요,  , 여, 러, 분]

4. char to String

정상적인 방법 2가지와 이상한 방법 1가지가 있다

4-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

4-2. 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)가 불가능합니다

4-3. +연산 사용하기

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 변환 총 정리

profile
블로그 이사 -> https://seopdo.tistory.com/

0개의 댓글