2016-07-29 2 views
0

String의 두 부분 문자열을 바꿔서 다음 코드를 작성하겠습니다. 나는 S가 거대한 문자열 일 때 효율성이 너무 낮다고 생각한다.문자열의 여러 하위 문자열을 한 번에 바꾸는 방법은 무엇입니까?

문자열의 여러 하위 문자열을 한 번에 바꿀 수 있습니까? 또는 문자열을 대체하는 더 좋은 방법이 있습니까?

추가 :

내가 빨리 하위 문자열 대체 할 수있는 방법을 찾을 수 있도록 노력하겠습니다! 당신은 단지 s 중 하나 개 검색을 수행하려면

String s="This %ToolBar% is a %Content%"; 

    s=s.replace("%ToolBar%","Edit ToolBar"); 
    s=s.replace("%Content%","made by Paul"); 
+1

's = s.replace ("% ToolBar %", "Edit ToolBar"). replace ("% Content %", "made by Paul"); 또는 다음 질문을 볼 수 있습니다. https : //stackoverflow.com/questions/7658568/most-efficient-way-to-use-replace-multiple-words-in-a-string –

+0

정규 표현식은 어떻습니까? –

+1

코드를보고 즉시 이해할 수 있으며이 코드를 1 년 동안 유지 관리 할 수 ​​있습니다. 왜 그걸 바꾸고 싶니? –

답변

3

, 당신은 당신의 자신의 indexOf() 루프를 수행하거나 정규 표현식 교체 루프를 사용 할 수 있습니다.

다음은 appendReplacement()appendTail() 메서드를 사용하여 결과를 작성하는 정규식 바꾸기 루프의 사용 예입니다.

문자열 비교를 통해 키워드를 찾았 으면 각 키워드는 캡처 그룹이되므로 키워드 존재 여부는 start(int group)을 사용하여 신속하게 확인할 수 있습니다.

String s = "This %ToolBar% is a %Content%"; 

StringBuffer buf = new StringBuffer(); 
Matcher m = Pattern.compile("%(?:(ToolBar)|(Content))%").matcher(s); 
while (m.find()) { 
    if (m.start(1) != -1) 
     m.appendReplacement(buf, "Edit ToolBar"); 
    else if (m.start(2) != -1) 
     m.appendReplacement(buf, "made by Paul"); 
} 
m.appendTail(buf); 
System.out.println(buf.toString()); // prints: This Edit ToolBar is a made by Paul 

보다 동적 인 버전은 this other answer에서 볼 수 있습니다.

+0

고마워요! Andreas에게 : 하위 문자열을 대체하는 가장 빠른 방법은 길입니까? – HelloCW

+0

'indexOf()'루프가 제대로 수행되면 약간 더 빨라질 수 있습니다. 이것은 더 간단하고 여전히 주요 입력 사항 인 매우 긴 입력 내용을 한 번만 검색합니다. – Andreas

관련 문제