문자열 문자 출력하는 JAVA에서 8가지 방법

길이가 N인 문자열 str을 순회하면서 문자를 출력합니다.

1.for문을 이용한 출력

가장 간단한 방법입니다. 0부터 N-1까지 변수 i를 사용하여 문자를 출력합니다.

public class StringPrinter1 {
	public static void main(String[] args) {
		String str = "hello wolrd";
		traverseString(str);
	}

	static void traverseString(String str) {
		for(int i = 0; i < str.length(); i++) {
			System.out.print(str.charAt(i));
		}
	}
}

2.String.toCharArray()를 이용한 출력

String.toCharArray() 메서드를 이용하여 문자열을 문자 배열로 변환합니다. 그런 다음 반복문을 이용하여 문자를 출력합니다.

public class StringPrinter2 {
	public static void main(String[] args) {
		String str = "hello wolrd";
		traverseString(str);
	}

	static void traverseString(String str) {
		char[] ch = str.toCharArray();
		
		for(int i = 0; i < ch.length; i++) {
			System.out.print(ch[i]);
		}
	}
}

3.CharacterIterator를 이용한 출력

Iterator를 이용하여 current()를 사용하여 현재 문자를 가져오고 next()를 사용하여 한 위치 앞으로 이동합니다.

public class StringPrinter3 {
	public static void main(String[] args) {
		String str = "hello wolrd";
		traverseString(str);
	}

	static void traverseString(String str) {
		CharacterIterator it = new StringCharacterIterator(str);
		
		while(it.current() != CharacterIterator.DONE) {
			System.out.print(it.current());
			it.next();
		}
	}
}

4.StringTokenizer를 이용한 출력

StringTokenizer에서 flag를 false일때는 구분자는 생략하고 true일때는 구분자도 포함되어서 리턴됩니다.

더보기

StringTokenizer(String str, String delim, boolean flag)

ex) StringTokenizer("hello wolrd", " ", flase) -> "hello","wolrd"

ex) StringTokenizer("hello wolrd", " ", true) -> "hello"," ","wolrd"

public class StringPrinter4 {
	public static void main(String[] args) {
		String str = "hello wolrd";
		traverseString(str);
	}

	static void traverseString(String str) {
		StringTokenizer st = new StringTokenizer(str, str, true);
		
		while(st.hasMoreTokens()) {
			System.out.print(st.nextToken());			
		}
		System.out.println();
		st = new StringTokenizer(str, "", false);
		
		while(st.hasMoreTokens()) {
			System.out.print(st.nextToken());			
		}
	}
}

5.String.split()를 이용한 출력

정규식을 기반으로 문자열을 분할합니다.

public class StringPrinter5 {
	public static void main(String[] args) {
		String str = "hello wolrd";
		traverseString(str);
	}

	static void traverseString(String str) {
		String[] substrings = str.split("");
		for(String ch : substrings) {
			System.out.print(ch);
		}
	}
}

6.Guava 라이브러리를 이용한 출력

Maven Repository에서 Guava를 검색 후 라이브러리 다운받은 후 추가합니다.

import com.google.common.collect.Lists;

public class StringPrinter6 {
	public static void main(String[] args) {
		String str = "hello wolrd";
		traverseString(str);
	}

	static void traverseString(String str) {
		for(Character ch : Lists.charactersOf(str)) {
			System.out.print(ch);
		}
		System.out.println();
        // 람다식을 사용한 출력
		Lists.charactersOf(str).listIterator().forEachRemaining(ch -> System.out.print(ch));
		System.out.println();
        // 메소드 참조를 사용한 출력
		Lists.charactersOf(str).listIterator().forEachRemaining(System.out::print);
	}
}

7.String.chars()를 이용한 출력

이 메서드는 성능상의 이유로 Stream<Character>를 반환하지 않고 Stream<Character>로 변환될 수 있는 IntStream으로 반환합니다.

public class StringPrinter7 {
	public static void main(String[] args) {
		String str = "hello wolrd";
		traverseString(str);
	}

	static void traverseString(String str) {
        // 유니코드 값을 출력
		str.chars().forEach(System.out::print);
		System.out.println();
		str.chars().mapToObj(Character::toChars).forEach(System.out::print);
		System.out.println();
		str.chars().mapToObj(i -> Character.valueOf((char)i)).forEach(System.out::print);
		System.out.println();
		str.chars().mapToObj(i -> (char)i).forEach(System.out::print);
		System.out.println();
		str.chars().mapToObj(i -> new StringBuilder().appendCodePoint(i)).forEach(System.out::print);
		System.out.println();
		str.chars().forEach(i -> System.out.print(Character.toChars(i)));
		System.out.println();
		str.chars().forEach(i -> System.out.print((char)i));
		System.out.println();
		str.chars().forEach(i -> System.out.print(new StringBuilder().appendCodePoint(i)));
	}
}

8.String.codePoints()를 이용한 출력

String.chars()와 똑같이 출력하시면 됩니다. String.codePints()는 더 많은 유니코드 값을 반환합니다.