2013-02-16 4 views
1
String inputString = args[0]; 
String out2 = inputString.replaceAll("I", "you"); 
String out1 = out2.replaceAll("you", "I"); 
System.out.println(out1); 

위의 코드는 main 메서드에 있습니다. "I"대신 "I", "I"는 "you"로 바뀌지 만, replaceAll()에 대한 후자의 호출 만 (out2에서 호출 된 것과 같이) 작동합니다. 실행 중일 때는 입력 문자열로 사용되는 첫 번째 인수를 "나는 당신에 대한 모든 것을 싫어합니다"로 설정했습니다.이 인수는 당신을 위해, 그리고 그 반대로 전환해야하지만, 대신 "나는 모든 것을 싫어합니다"가 출력됩니다.String.replaceAll() - "I"를 "You"로 바꾸거나 그 반대로

아이디어가 있으십니까?

건배

모든 I's 이미 you되기 때문에 당신이 you's 교체 시간,이다

답변

12

.

는이 같은 일을 대체 이런 종류의 중간 대체 값을 사용해야합니다

inputString = inputString.replaceAll("I", "_I_") 
         .replaceAll("you", "I") 
         .replaceAll("_I_", "you"); 

이 그 가정, 당신의 중간 값 ("_I_"가) 당신의 문자열에없는 것입니다. 그래서 신중하게 선택해야합니다.

+0

중간 값은 중간 값이 텍스트의 첫 번째 위치에 존재하지 않는다는 가정하에 만 작동합니다. – nhahtdh

+0

@nhahtdh. 그래 맞아. :) –

+0

물론 아, 총 의미 - 감사합니다! :) –

1

변경 중이므로 필요한 것은 임시 기호 (예 : # TEMP #, 나, # TEMP #)가있는 스왑입니다.

+0

이것은 임시 기호가 텍스트에 나타나지 않는다는 가정하에 만 작동합니다. – nhahtdh

+0

"텍스트에 나타나지 않는 임시 기호"로 대체하십시오. –