Java에서 문자열 연결

문자열 연결은 두 개 이상의 작은 문자열을 병합하여 최종 문자열을 만드는 작업입니다. 예를 들어, 사람의 이름과 성을 연결하여 전체 이름을 만들 수 있습니다. Java는 문자열을 연결하는 여러 가지 방법을 제공하지만 그 중 가장 쉬운 방법은 + 연산자를 사용하는 것입니다.     있습니다 Java에서 문자열을 연결하는 네 가지 방법 :
  1. 연결 연산자 '+'
  2. 함수 String.concat()
  3. StringBuilder
  4. StringBuffer

연산자로 문자열 연결 +

연산자 '+'을 사용하여 두 개 이상의 문자열을 연결하는 것이 작업을 완료하는 가장 쉬운 방법입니다. 예를 들어 "One" + "Two"는 String 개체 "OneTwo"를 생성합니다. 이 연산자를 사용하여 적어도 두 개의 문자열을 결합할 수 있습니다(예: "ab"+"cde"+fghi"는 "abcdefghi"를 제공하며 문자열 변수를 사용할 수도 있습니다.
이 연산은 컴파일러에 의해 다음과 같이 변환됩니다.

new StringBuilder().append("string1").append("string2").toString()
이 프로그램은 두 문자열을 연결합니다.

public class Concatenation_string {
public static void main(String[] args) {
String s1 = "string1";
문자열 s2 = "string2";

문자열 s1s2 = concatenation_strings_java(s1, s2);
System.out.println(s1s2);
}

public static String concatenation_strings_java (문자열 s1, 문자열 s2) {
return s1+s2;
}
}
Runtime:

string1chain2

Concate strings with the String.concat()

이 메서드는 한 String을 다른 String의 끝에 연결합니다. 이 메서드는 해당 메서드를 호출하는 데 사용된 String의 끝과 함께 연결된 메서드에 전달된 String 값을 가진 String을 반환합니다.

public String concat(String s)
Example:

public class Concatenation_string {
public static void main(String[] args) {< br /> 문자열 s = "나는 하나다";
s = s.concat(" 프로그래머");
System.out.println(들);
}
}
Runtime:

저는 프로그래머입니다

'+'연산자와 String.concat()의 차이점

'+' 및 concat() , 우리는 실제 예제로 작업 할 것입니다.

a+=b
a.concat(b)
첫째, 의미론에 약간의 차이가 있습니다. a가 null이면 a.concat(b)NullPointerException이지만 '+' 명령문 a+=ba null입니다. 또한 concat()은 문자열 값만 허용하는 반면 '+' 연산자는 값을 문자열( toString() )입니다. concat() 은 허용합니다.

이 코드를 작성하고 출력에서 얻을 수 있는 것을 볼 수 있습니다.

public static void main(String[] args) {
String s = null;
s = s.concat(" 프로그래머");
System.out.println(들);
}
런타임에 다음과 같이 표시되어야 합니다:

스레드 "main"의 예외 java.lang.NullPointerException
Concatenation_string.main(Concatenation_string.java:5)

'+':

public static void main(String[] args) {
문자열 s = null;
s = s + 프로그래머;
System.out.println(들);
}
다음과 같은 결과가 나와야 합니다:

nullprogrammer
따라서 앞서 말했듯이 연산자 '+'은 다음과 같습니다.

a = new StringBuilder()
.append(a)
.append(b)
.toString();

문자열을 StringBuffer 및 StringBuilder와 연결

이 연결 방법은 String 개체를 생성하지 않으므로 메모리 및 시간 비용을 줄입니다. 실제로 StringBuffer 대신 StringBuilder는 기능은 동일하지만 동기화가 없으므로 항상 StringBuilder를 사용해야 하므로 더 빠른 작업을 의미합니다. StringBuffer 또는 StringBuilder를 사용하면 아래와 같이 구조화된 코드가 생성됩니다.

String result = new StringBuilder(15).append(name).append(" ").append(firstname).toString(); 
StringBuilder를 사용하여 여러 문자열을 연결하는 것이 얼마나 쉬운지 알 수 있습니다. 그러나 StringBuilder 는 최종 문자열의 문자 수와 동일한 용량으로 초기화해야 합니다. 이렇게하면 String을 올바르게 초기화하여 사용할 수없는 메모리가 손실되는 것을 방지하고 CPU 시간을 줄일 수 있습니다.

다음은 StringBuilder 및 StringBuffer와 String을 연결하는 방법을 보여주는 Java 프로그램의 예입니다.

public static void main(String[] args) {
String court ="Court of";
문자열 module_math ="수학";

/* StringBuilder */
문자열 module_res = "networks";
int 길이 = court.length()+module_math.length();
StringBuilder sb = 새로운 StringBuilder(길이);
sb.append(법원).append(module_math);
문자열 res = sb.toString();
System.out.println(res);

/* 스트링 빌더 */
length = court.length()+module_math.length();
StringBuffer sBuffer = 새로운 StringBuffer(길이);
sb.append(" 및").append(court).append(module_res);
해상도 = sb.toString();
System.out.println(res);
}
출력:

 수학 안뜰
수학 안뜰 및 네트워크 Courtyard

Java에서 문자열 연결 성능

문자열을 연결하는 가장 쉽고 빠른 방법은 '+' 연산자를 사용하는 것입니다. 그리고 두 개의 문자열 만있을 때 매우 잘 작동하지만 수천 개의 문자열을 연결해야하는 경우, 특히 루프 내에서 '+'연산자를 사용하면 성능이 저하됩니다. 성능 저하의 원인은 String 개체에 대한 임시 배치를 만들기 때문입니다. 프로그램에 문자열이 많은 경우 대규모 연결을 위한 가장 좋은 방법은 StringBuilder입니다. 이 통계는 Windows 7 64비트 환경, 4GB RAM이 장착된 Core 2 Duo 프로세서(2.53GHz)에서 작성되었습니다.

public static void main(String[] args) {
int nb_op=10000;
문자열 s="";

이중 t1, t2, 시간;
t1= System.currentTimeMillis();
for(int i = 0 ; i < nb_op; i++)
s += "*";
t2 = System.currentTimeMillis();
시간 = t2-t1;
System.out.println("+: "+시간);

s="";
t1= System.currentTimeMillis();
for(int i = 0 ; i < nb_op; i++)
s.concat("*");
t2 = System.currentTimeMillis();
시간 = t2-t1;
System.out.println("concat: "+시간);

StringBuilder sb=새로운 StringBuilder();
t1= System.currentTimeMillis();
for(int i = 0 ; i < nb_op; i++)
sb.append("*");
t2 = System.currentTimeMillis();
시간 = t2-t1;
System.out.println("StringBuilder: "+시간);

StringBuffer sBuffer=새로운 StringBuffer();
t1= System.currentTimeMillis();
for(int i = 0 ; i < nb_op; i++)
sBuffer.append("*");
t2 = System.currentTimeMillis();
시간 = t2-t1;
System.out.println("StringBuffer: "+시간);
}
10000 연결 작업에 대한 결과:

+: 180.0
concat: 13.0
StringBuilder: 2.0
StringBuffer: 4.0
Java에서 StringBuilder, StringBuffer 및 concat의 성능< / a>< / td>< / tr>
10000 개의 작업에 대한 밀리 초 단위의 시간 < / td>< / tr>< / tbody>< / table > 작업 수의 함수로 달성 된 시간을 보여주는 또 다른 그래프 :

Java의 문자열 연결 시간

첫인상은 놀랍습니다! 여기서 우리는 연산자 '+'가 달성 한 시간이 연결 작업 수에 비례하며 100000 개의 작업에 대해 10 초를 수행했음을 즉시 알 수 있습니다. 따라서 '+'연산자는 대규모 프로젝트에서 작업 할 때 매우 나쁜 선택입니다. concat, StringBuilder 및 StringBuffer는 '+'연산자에 표시되지 않지만 통계 표에서 StringBiulder가 더 적은 시간을 걸었음을 알 수 있습니다.

메서드  concat()  빠릅니다. 그러나 여러 문자열의 연결은 성능 측면에서 StringBuilder 메서드를 사용하여 더 빠르게 수행됩니다.

String 및 StringBuilder의 소스 코드는 Sun JDK에서 사용할 수 있습니다. 탱크 보드를 만들고 있는 것을 볼 수 있습니다. 메모리 할당이 매우 빠릅니다.

Remember:
  • 루프에서 operator +를 사용하지 마십시오.
  • 항상 여러 Strings를 연결하려면 StringBuilder를 사용하십시오.
  • Always StringBuilder.
References의 크기를 초기화합니다.
Java - 문자열 concat() 메서드
문자열 연결: concat() 대 + 연산자
Java - 문자열 버퍼 append() 메서드