Java에서 문자열 연결

1. 소개

Java는 문자열 연결 전용으로 상당한 수의 메서드와 클래스를 제공합니다 .

이 튜토리얼에서는 몇 가지 일반적인 함정과 나쁜 관행에 대해 간략히 설명 할뿐만 아니라 그 중 몇 가지를 살펴볼 것 입니다.

2. StringBuilder

첫 번째는 겸손한 StringBuilder입니다. 이 클래스 의 배열을 제공 현악기와 유틸리티 구축 의 쉬운 작업하게 문자열 조작.

StringBuilder 클래스를 사용하여 문자열 연결 의 빠른 예제를 작성해 보겠습니다 .

StringBuilder stringBuilder = new StringBuilder(100); stringBuilder.append("Baeldung"); stringBuilder.append(" is"); stringBuilder.append(" awesome"); assertEquals("Baeldung is awesome", stringBuilder.toString());

내부적으로 StringBuilder 는 가변 문자 배열을 유지합니다. 코드 샘플 에서 StringBuilder 생성자를 통해 초기 크기가 100 이되도록 선언했습니다 . 이 크기 선언으로 인해 StringBuilderStrings 를 연결 하는 매우 효율적인 방법이 될 수 있습니다 .

또한 가치가 있음을 주목할 것 StringBuffer와의 클래스의 동기화 된 버전 의 StringBuilder .

동기화는 종종 스레드 안전성과 동의어이지만 StringBuffer의 빌더 패턴 으로 인해 다중 스레드 응용 프로그램에서 사용하는 것은 권장되지 않습니다 . 동기화 된 메서드에 대한 개별 호출은 스레드로부터 안전하지만 여러 호출은 그렇지 않습니다.

3. 덧셈 연산자

다음은 더하기 연산자 (+)입니다. 이것은 숫자를 추가하는 동일한 연산자이며 문자열에 적용될 때 연결하기 위해 오버로드됩니다 .

이것이 어떻게 작동하는지 간단히 살펴 보겠습니다.

String myString = "The " + "quick " + "brown " + "fox..."; assertEquals("The quick brown fox...", myString);

언뜻보기에 이것은 StringBuilder 옵션 보다 훨씬 간결하게 보일 수 있습니다. 그러나 소스 코드가 컴파일 될 때 + 기호는 StringBuilder.append () 호출 체인으로 변환됩니다 . 이로 인해 StringBuilder 와 + 연결 방법혼합하는 것은 나쁜 습관 으로 간주됩니다 .

또한 루프 내에서 + 연산자를 사용하는 문자열 연결은 피해야합니다. 때문에 문자열 객체가 불변이고, 연결에 대한 각각의 호출은 새로운 초래할 것이다 문자열 오브젝트가 생성된다.

4. 문자열 메서드

문자열 클래스 자체는 합치하는 방법의 전체 호스트 제공 문자열.

4.1. String.concat

당연히 String.concat 메서드는 String 개체 를 연결하려고 할 때 첫 번째 호출 포트입니다 . 이 메서드는 String 개체를 반환 하므로 메서드를 함께 연결하는 것이 유용한 기능입니다.

String myString = "Both".concat(" fickle") .concat(" dwarves") .concat(" jinx") .concat(" my") .concat(" pig") .concat(" quiz"); assertEquals("Both fickle dwarves jinx my pig quiz", myString);

이 예에서 체인은 String 리터럴로 시작되고 concat 메서드를 사용하면 추가 Strings 를 추가하는 호출을 연결할 수 있습니다 .

4.2. String.format

다음은 String.format 메소드로 다양한 Java 객체String 템플릿 에 삽입 할 수 있습니다 .

및 String.format의 메소드 서명은 필요 하나의 문자열 우리의 템플릿을 나타내는을 . 이 템플릿에는 다양한 개체가 있는 위치를 나타내는 '%'문자가 포함되어 있습니다. 안에 배치 되어야합니다.

템플릿이 선언되면 템플릿에 주입되는 varargs Object 배열받습니다 .

간단한 예제를 통해 이것이 어떻게 작동하는지 살펴 보겠습니다.

String myString = String.format("%s %s %.2f %s %s, %s...", "I", "ate", 2.5056302, "blueberry", "pies", "oops"); assertEquals("I ate 2.51 blueberry pies, oops...", myString);

위에서 볼 수 있듯이 메서드는 문자열 을 올바른 형식으로 주입했습니다 .

4.3. String.join (Java 8 이상)

우리의 경우 응용 프로그램이 자바 8에서 실행 또는 이상 , 우리는 하루의 피로를 풀 수 있습니다 String.join의 방법. 이를 통해 공통 구분 기호 문자열 배열을 결합하여 공백이 누락되지 않도록 할 수 있습니다.

String[] strings = {"I'm", "running", "out", "of", "pangrams!"}; String myString = String.join(" ", strings); assertEquals("I'm running out of pangrams!", myString); 

이 방법의 큰 장점은 문자열 사이의 구분 기호에 대해 걱정할 필요가 없다는 것입니다.

5. StringJoiner (Java 8 이상)

StringJoiner는 모든 String.join 기능을 사용하기 쉬운 클래스로 추상화합니다 . 생성자는 선택적 접두사와 접미사로 구분됩니다 . 잘 이름이 지정된 add 메소드를 사용하여 문자열 을 추가 할 수 있습니다 .

StringJoiner fruitJoiner = new StringJoiner(", "); fruitJoiner.add("Apples"); fruitJoiner.add("Oranges"); fruitJoiner.add("Bananas"); assertEquals("Apples, Oranges, Bananas", fruitJoiner.toString());

String.join 메서드 대신이 클래스를 사용 하여 프로그램이 실행될 때 문자열추가 할 수 있습니다 . 먼저 배열을 만들 필요가 없습니다!

자세한 정보와 예제 는 StringJoiner에 대한 기사 를 참조하십시오.

6. Arrays.toString

배열 주제에서 Array 클래스에는 객체 배열을 멋지게 형식화하는 편리한 toString 메서드 도 포함되어 있습니다. 배열. toString 메서드는 또한 모든 포함 된 개체 의 toString 메서드를 호출 하므로 하나가 정의되어 있는지 확인해야합니다.

String[] myFavouriteLanguages = {"Java", "JavaScript", "Python"}; String toString = Arrays.toString(myFavouriteLanguages); assertEquals("[Java, JavaScript, Python]", toString);

불행히도 어레이. toString 메소드는 사용자 정의 할 수 없으며 대괄호로 묶인 문자열출력합니다 .

7. Collectors.joining (Java 8 이상)

마지막으로 Stream 의 출력을 단일 문자열보낼 수 있는 Collectors.joining 메서드를 살펴 보겠습니다 .

List awesomeAnimals = Arrays.asList("Shark", "Panda", "Armadillo"); String animalString = awesomeAnimals.stream().collect(Collectors.joining(", ")); assertEquals("Shark, Panda, Armadillo", animalString);

스트림을 사용하면 필터링, 매핑, 반복 등 Java 8 Stream API 와 관련된 모든 기능이 잠금 해제됩니다 .

8. 마무리

이 기사에서는 문자열 을 연결하는 데 사용되는 다양한 클래스와 메서드에 대해 자세히 살펴 보았습니다.자바 언어로.

항상 그렇듯이 소스 코드는 GitHub에서 사용할 수 있습니다.