2014-06-05 8 views
1

다음 문제에 대한 모범 사례 Java 접근 방식을 찾고 있습니다. -
나는 그것을 만들 수있는 (상대적으로) 긴 문자열과 (겹치지 않는) 변경 세트가 변경 서명을 가지고 있다고 할 수 있습니다 :Java의 모범 사례 변경 - 모범 사례 접근

change(int startIndex, int endIndex, String replacement); 

하고 예를 들어이 될 것

assert doChange("aaa",new Change(1,2,"hello")).equals("aHelloa"); 

내 계획은 매번 세 개의 조각으로 나뉘어져있는 문자열과 교체 할 때 바느질하지만 뒤로 향하게하는 것입니다 (따라서 변경되는 인덱스는 피할 수 있습니다). 그러나 이것이 훨씬 더 효과적인/자바와 같은 접근법을 가지고 있다고 상상할 수 있습니다 ... 내가 놓친 API 호출이 있습니까?

+0

경고 -주의를 산만하게했습니다 ... 지적 해 주셔서 감사합니다. – Joe

+0

http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html#insert(int,%20java.lang.CharSequence) – assylias

+0

오히려 http://docs.oracle.com /javase/7/docs/api/java/lang/StringBuilder.html#replace(int,%20int,%20java.lang.String) – assylias

답변

1

표준 Java 문자열은 변경 불가능하므로 확장 된 문자열 기반 작업에는 적합하지 않습니다. 그러나 다루기 위해 고안된 변경 가능한 문자열을 나타내는 클래스 StringBufferStringBuilder도 있습니다. 그들은 심지어 당신이하려고하는 정확히 수행하는 네이티브 replace(start, end, str) 방법을 가지고 있습니다.

이 두 클래스의 주된 차이점은 StringBuffer는 스레드로부터 안전하지만 StringBuilder는 그렇지 않다는 것입니다. 같은 문자열에 액세스하는 스레드가 여러 개 없을 때는 일반적으로 더 빨리 수행하기 때문에 StringBuilder를 사용하십시오.

+1

주 StringBuilder는 거의 항상 * 항상 * StringBuffer보다 더 나은 선택입니다. 단, StringBuffer가 동기화되어 있으므로 성능 비용이 발생합니다 ... 여러 스레드에서 StringBuffer에 대한 동시 작업을 수행하지 않으면 StringBuilder가 가장 좋습니다 –

+0

StringBuffer의 스레드 안전이 과대 평가되었습니다 ... – assylias