2014-01-21 4 views
1
내가 .toCharArray() 또는 .getBytes()와 함께 작동하도록 더 나은 방법입니다 자바 문자열, 일부 효율적인 문자 별 교체하고 싶은

?효율적인 char 단위 연산을 사용하는 Java 가변 "문자열": toCharArray() 또는 getBytes()?

예제 코드 :

// big loop { 
    String s = "..###.##...#"; 
    char[] c = s.toCharArray(); 
    c[4] = '$'; 
    c[8] = 'A'; 
    // etc 
// } 

가이 두 방법 사이에 약간의 차이, 또는 하나가 다른여 것이 좋습니다 경우, 내가 그것을 듣고 기뻐한다면

.

+1

http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html –

+0

비슷한 게시물을보십시오. http://stackoverflow.com/questions/8894258/fastest-way -to-으로 반복 - 이상 - 모두 - 더 - 문자 - 인 - 어 - 문자열 효율 (배열 기반 작업)을 찾고 있어요 @BrianRoach –

+0

(이상 문자열의 모든 문자를 반복하는 가장 빠른 방법)이 아닌 빌더 – vikingsteve

답변

4

toCharArray 더 낫다. 그렇게하면 인코딩을 다룰 필요가 없습니다. 적어도 정상적인 경우는 아닙니다 (두 개의 서로 게이트 문자로 인코딩 된 유니 코드 BMP 외부의 문자 제외). 기본적으로 중국어 텍스트를 다룰 필요가 없다면 문제가되지 않습니다.

String에서 char 어레이로의 변환은 toBytes()보다 빠릅니다. 기본적으로 문자 인코딩 문제가없는 배열 복사본입니다. 내부적하는 Stringchar[]하고, (적어도 자바 7 및 최신 위해)를 포함, 그다지 많지 않죠.

문자 인코딩이 필요하지 않기 때문에 byte 배열보다 char 배열에서 String 배열을 다시 만드는 것이 더 빠릅니다. 변경 가능한 문자열처럼

+0

토마스에게 감사 드리는 바입니다. 내가 찾고 있던 정보였습니다. – vikingsteve

1

사용하십시오 StringBuilder : 당신이 내용을 변경하는 데 사용할 수있는 다른 방법이 많이 있습니다

String s = "..###.##...#"; 
StringBuilder sb = new StringBuilder(s); 
sb.setCharAt(4, '$'); 

. 완료되면 :

s = sb.toString(); 
+0

또는 장소 전체에서 동기화되지 않는'StringBuilder' ... –

+0

s/StringBuffer/StringBuilder/...당신이 정말로 스레드 안전을 필요로하지 않는 한 –

+0

나는 efficieny를 찾고있다. 그래서 배열은 버퍼보다 ​​나에게 잘 어울릴 것이다. 나는 String을 고정 된 길이라고 덧붙여 야합니다. – vikingsteve

1

문자 값을 비교하려면 toCharArray()을 사용하십시오.

문자의 UTF-8 인코딩의 이진 값을 비교하려면 getBytes()을 사용하십시오.

toCharArray은 일반적으로 toByteArray보다 빠르지 만 종종 charAt보다 느립니다.