자바 문자열 문자를 가져와 표현하는 7가지 방법에 대해서 알아보자!
1. 단순 방법
for 루프를 사용하여 문자열의 각 문자를 처리
이 접근 방식은 길이가 더 작은 문자열에 매우 효과적이다.
class Main
{
// 문자열의 문자 n반복
public static void main(String[] args)
{
String s = "Snow hong IT블로그";
// 간단한 for 루프 사용
for (int i = 0; i < s.length(); i++) {
for(int j=0; j<2; j++){
System.out.print(s.charAt(i));
}
}
}
}
결과 : SSnnooww hhoonngg IITT블블로로그그
2. String.toCharArray() 방법
char[] 사용하여 String.toCharArray() 다음과 같이 향상된 for 루프(for-each 루프)를 사용하여 문자 배열을 반복
class Main
{
// 문자열의 문자 n반복
public static void main(String[] args)
{
String s = "Snow hong IT블로그";
// 문자열을 배열로 변환
char[] chars = s.toCharArray();
// 향상된 for 루프를 사용하여 `char[]` 배열 반복
for (char ch: chars) {
for(int j=0; j<2; j++){
System.out.print(ch);
}
}
}
}
결과 : SSnnooww hhoonngg IITT블블로로그그
3. Iterator 방법
StringCharacterIterator String에 대한 양방향 반복을 구현하는 클래스
import java.text.CharacterIterator;
import java.text.StringCharacterIterator;
class Main
{
// 문자열의 문자 n반복
public static void main(String[] args)
{
String s = "Snow hong IT블로그";
CharacterIterator it = new StringCharacterIterator(s);
while (it.current() != CharacterIterator.DONE)
{
for(int j=0; j<2; j++)
System.out.print(it.current());
it.next();
}
}
}
결과 : SSnnooww hhoonngg IITT블블로로그그
4. StringTokenizer 방법
StringTokenizer 사용을 권장X
StringTokenizer 클래스는 문자열을 토큰으로 나눈다.
StringTokenizer(String str, String delim, boolean returnDelims)의 예 StringTokenizer 로 생성되었는지 여부에 따라 두 가지 방식 중 하나로 동작
delim : 분리할 String값
returnDelims 값 : true / false
- returnDelims false이면 구분 기호가 토큰을 구분하는 역할
: 따라서 토큰은 구분 기호가 아닌 연속 문자의 최대 시퀀스
-returnDelims true이면 구분 기호 문자 자체가 토큰으로 간주
: 따라서 토큰은 하나의 구분 기호 문자 or 구분 기호가 아닌 연속 문자의 최대 시퀀스
import java.util.StringTokenizer;
class Main
{
// 문자열의 문자 n반복
public static void main(String[] args)
{
String s = "Snow hong IT블로그";
StringTokenizer st = new StringTokenizer(s,s, true);
while (st.hasMoreTokens()) {
String str = st.nextToken();
for(int j=0; j<2; j++)
System.out.print(str);
}
}
결과 : SSnnooww hhoonngg IITT블블로로그그
5. String.Split() 방법
String.split() 메소드 오버 StringTokenizer, 레거시 클래스이며 호환성을 위해 있음.
split() 사용하는 방법 추천
class Main
{
// 문자열의 문자 n반복
public static void main(String[] args)
{
String s = "Snow hong IT블로그";
String[] arr = s.split("");
for (String ch: arr) {
for(int j=0; j<2; j++)
System.out.print(ch);
}
}
}
결과 : SSnnooww hhoonngg IITT블블로로그그
6. String.chars() 방법
Java 8버전 이상
String.chars(), 반환 IntStream (int의 스트림) 문자열에서 문자의 정수 표현
이 메서드는 원하는 값을 반환하지 않습니다.
Stream<Character> (성능상의 이유로) IntStream 자동으로 상자에 넣어지는 방식으로 개체에 Stream<Character>.
class Main
{
// 문자열의 문자 n반복
public static void main(String[] args)
{
String s = "Snow hong IT블로그";
// 1. `Stream<Character>`로의 암시적 박싱
// 1.1. 메소드 참조 사용
System.out.println("1");
s1.chars().mapToObj(Character::toChars).forEach(System.out::print);
System.out.println();
// 1.2. `int`를 `char`로 캐스팅하여 람다 표현식 사용
System.out.println("2");
s1.chars().mapToObj(i -> Character.valueOf((char) i)).forEach(System.out::print);
System.out.println();
System.out.println("3");
s1.chars().mapToObj(i -> (char) i).forEach(System.out::print);
System.out.println();
System.out.println("4");
s1.chars().mapToObj(i -> new StringBuilder().appendCodePoint(i)).forEach(System.out::print);
System.out.println();
// 2. `Stream<Character>`로 boxing하지 않음
System.out.println("5");
s1.chars().forEach(i -> System.out.print(Character.toChars(i)));
System.out.println();
System.out.println("6");
s1.chars().forEach(i -> System.out.print((char) i));
System.out.println();
System.out.println("7");
s1.chars().forEach(i -> System.out.print(new StringBuilder().appendCodePoint(i)));
System.out.println();
}
결과 :
1
Snow hong IT블로그
2
Snow hong IT블로그
3
Snow hong IT블로그
4
Snow hong IT블로그
5
Snow hong IT블로그
6
Snow hong IT블로그
7
Snow hong IT블로그
7. 코드 포인트 사용
Java 8도 사용가능
String.codePoints() 대신에 String.chars() 그것도 반환 IntStream 하지만 char 값 대신 유니코드 코드 포인트를 사용
class Main
{
// 문자열의 문자 n반복
public static void main(String[] args)
{
String s = "Snow hong IT블로그";
/* 1. `Stream<Character>`로 암시적 복싱 */
// 1.1. 메소드 참조 사용
System.out.println("1");
s.codePoints().mapToObj(Character::toChars).forEach(System.out::print);
System.out.println();
System.out.println("2");
s.codePoints().mapToObj(i -> new StringBuilder().appendCodePoint(i)).forEach(System.out::println);
System.out.println();
// 1.2. `int`를 `char`로 캐스팅하여 람다 표현식 사용
System.out.println("3");
s.chars().mapToObj(i -> Character.valueOf((char) i)).forEach(System.out::print);
System.out.println();
System.out.println("4");
s.codePoints().mapToObj(i -> (char) i).forEach(System.out::print);
System.out.println();
/* 2. `Stream<Character>`로 Boxing 없이 */
System.out.println("5");
s.codePoints().forEach(i -> System.out.print(Character.toChars(i)));
System.out.println();
System.out.println("6");
s.codePoints().forEach(i -> System.out.print((char) i));
System.out.println();
System.out.println("7");
s.chars().forEach(i -> System.out.print(new StringBuilder().appendCodePoint(i)));
System.out.println();
}
결과 :
1
Snow hong IT블로그
2
S
n
o
w
h
o
n
g
I
T
블
로
그
3
Snow hong IT블로그
4
Snow hong IT블로그
5
Snow hong IT블로그
6
Snow hong IT블로그
7
Snow hong IT블로그
[ 참고사이트 ]
https://www.techiedelight.com/ko/iterate-over-characters-string-java/
'Spring > Java' 카테고리의 다른 글
[Java Spring ] profiles 정보 가져오기 (0) | 2024.01.03 |
---|---|
[java/자바] Session 세션 사용 방법 (0) | 2023.04.17 |
[java] 문자열 분리하기 - StringTokenizer 클래스 (0) | 2023.04.13 |
[ Java ] 자바 환경변수 설정방법 (0) | 2022.08.31 |
[ Java ] Ellipsis (...) 가변인수 사용법 및 예제 (0) | 2022.07.15 |
댓글