1. 개요

String 은 아마도 Java에서 가장 일반적으로 사용되는 유형 중 하나일 것입니다.

이 사용방법(예제)에서는 문자열을 문자열 배열( String[] )로 변환 하는 방법 살펴 봅니다 .

2. 문제 소개

문자열을 string형 배열로 변환하는 데는 두 가지 시나리오가 있을 수 있습니다.

  • 문자열을 싱글톤 배열(단 하나의 요소만 포함하는 배열)으로 변환
  • 특정 규칙에 따라 문자열을 배열의 요소로 나누기

사례 1은 비교적 이해하기 쉽습니다. 예를 들어 "baeldung" 문자열이 있는 경우 이를 String[]{ "baeldung" } 로 변환하려고 합니다 . 즉, 변환된 배열에는 입력 문자열 자체인 하나의 요소만 있습니다 .

사례 2의 경우 입력 문자열을 조각으로 나눌 필요가 있습니다. 그러나 결과가 어떻게 되어야 하는지는 전적으로 요구 사항에 따라 다릅니다. 예를 들어, 최종 배열의 각 요소에 "baeldung" 이 주어 지면 입력 문자열에서 두 개의 인접한 문자가 포함될 것으로 예상하면 String[]{ "ba", "el", "du", "ng" } . 나중에 더 많은 예를 볼 것입니다.

이 사용방법(예제)에서는 이 문자열을 입력으로 사용합니다.

String INPUT = "Hi there, nice to meet you!";

물론 두 가지 변환 시나리오를 모두 다룰 것입니다. 또한 단순성을 위해 단위 테스트 어설션을 사용하여 솔루션이 예상대로 작동하는지 확인합니다.

3. 싱글톤 배열로 변환하기

입력 문자열이 대상 배열의 유일한 요소이므로 문제를 해결하기 위해 입력 문자열을 사용하여 배열을 간단히 초기화 할 수 있습니다 .

String[] myArray = new String[] { INPUT };
assertArrayEquals(new String[] { "Hi there, nice to meet you!" }, myArray);

그런 다음 테스트를 실행하면 통과합니다.

4. 입력 문자열을 배열의 요소로 변환

이제 입력 문자열을 세그먼트로 나누는 방법을 살펴보겠습니다.

4.1. Stringsplit() 메서드 사용

우리는 종종 특정 패턴의 입력 문자열로 작업해야 합니다. 이 경우 정규식이나 regex 를 사용하여 입력을 String 배열 로 나눌 수 있습니다 Java의 String 클래스는 이 작업을 수행하기 위해 split() 메소드를 제공합니다 .

다음으로, 몇 가지 다른 요구 사항에 따라 입력 예제를 배열로 분할하는 방법을 다룰 것입니다.

먼저 입력 문장을 절의 배열로 분할하고 싶다고 가정해 보겠습니다. 이 문제를 해결하기 위해 입력 문자열을 구두점으로 분할할 수 있습니다.

String[] myArray = INPUT.split("[-,.!;?]\\s*" );
assertArrayEquals(new String[] { "Hi there", "nice to meet you" }, myArray);

대시 문자를 포함하기 위해 정규식의 문자 클래스가 필요할 때 맨 처음에 넣을 수 있다는 점을 언급할 가치 가 있습니다 .

위의 테스트는 입력 문자열이 배열에서 두 개의 절로 분할되었음을 보여줍니다.

다음으로 동일한 입력 문자열에서 모든 단어를 단어 배열로 추출해 보겠습니다. 이것은 우리가 현실 세계에서 직면할 수 있는 일반적인 문제이기도 합니다.

단어 배열을 얻으려면 입력을 단어가 아닌 문자( \W+ )로 분할할 수 있습니다.

String[] myArray = INPUT.split("\\W+");
assertArrayEquals(new String[] { "Hi", "there", "nice", "to", "meet", "you" }, myArray);

마지막으로 입력 문자열을 문자로 나누겠습니다.

String[] myArray = INPUT.split("");
assertArrayEquals(new String[] {
    "H", "i", " ", "t", "h", "e", "r", "e", ",", " ",
    "n", "i", "c", "e", " ", "t", "o", " ", "m", "e", "e", "t", " ", "y", "o", "u", "!"
}, myArray);

위의 코드에서 볼 수 있듯이 빈 문자열(너비 0)을 정규식으로 사용합니다. 입력 문자열의 공백을 포함한 모든 문자는 대상 배열의 요소로 추출됩니다.

String.toCharArray() 는 입력도 배열로 변환 한다는 점 유의해야 합니다 . 그러나 대상 배열은 String 배열( String[] ) 대신 char 배열( char[ ] ) 입니다.

세 가지 예에서는 String.split() 메서드를 사용하여 입력 문자열을 다른 문자열 배열로 변환했습니다. GuavaApache Commons 와 같은 일부 인기 라이브러리 도 향상된 문자열 분할 기능을 제공합니다. 우리는 다른 기사 에서 그것에 대해 자세히 이야기했습니다.

또한 다양한 콘크리트 분할 문제 를 해결하는 방법에 대해 논의할 다른 기사가 많이 있습니다 .

4.2. 특별 구문 분석 요구 사항

때로는 입력을 분할하기 위해 특정 규칙을 따라야 합니다. 예를 들어 신속하게 설명할 수 있습니다. 다음과 같은 입력 문자열이 있다고 가정해 보겠습니다.

String FLIGHT_INPUT = "20221018LH720FRAPEK";

결과적으로 이 배열을 얻을 것으로 예상합니다.

{ "20221018", "LH720", "FRA", "PEK" }

음, 언뜻 보기에 이 변환 논리는 모호해 보입니다. 그러나 입력 문자열의 정의를 나열하면 위의 배열이 필요한 이유를 알 수 있습니다.

[date][Flight number][Airport from][Airport to]
- date: YYYY-MM-DD; length:8
- Flight number; length: variable
- Airport From: IATA airport code, length:3
- Airport To: IATA airport code, length:3

우리가 볼 수 있듯이 때때로 우리는 꽤 특별한 규칙에 따라 입력 문자열을 구문 분석해야 합니다. 이 경우 요구 사항을 분석하고 파서를 구현해야 합니다 .

String dateStr = FLIGHT_INPUT.substring(0, 8);
String flightNo = FLIGHT_INPUT.substring(8, FLIGHT_INPUT.length() - 6);
int airportStart = dateStr.length() + flightNo.length();
String from = FLIGHT_INPUT.substring(airportStart, airportStart + 3);
String to = FLIGHT_INPUT.substring(airportStart + 3);
                                                                               
String[] myArray = new String[] { dateStr, flightNo, from, to };
assertArrayEquals(new String[] { "20221018", "LH720", "FRA", "PEK" }, myArray);

위의 코드에서 볼 수 있듯이 우리는 substring() 메서드를 사용하여 파서를 만들고 비행 입력을 올바르게 처리했습니다.

5. 결론

이 기사에서는 Java에서 String을 String 배열 변환 하는 방법을 배웠습니다 .

간단히 말해서 문자열을 싱글톤 배열로 변환하는 것은 매우 간단합니다. 주어진 문자열을 세그먼트로 분리해야 하는 경우 String.split() 메서드를 사용할 수 있습니다. 그러나 특정 규칙에 따라 입력을 중단해야 하는 경우 입력 형식을 신중하게 분석하고 문제를 해결하기 위해 파서를 구현하는 것이 좋습니다.

항상 그렇듯이 기사에 사용된 전체 코드는 GitHub에서 사용할 수 있습니다 .

Generic footer banner