배경
String 클래스의 API의 JDK는 방법의 사용 빈도가 높은 교체, 우리에게 제공했다. 그는 문자열의 내용을 대체 할 수 있기 때문에, 단지 대체 문자열 및 대체 문자열을 입력 문자열은 쉽게 당신이 매우 강력하고, 원하는 것을 얻을 수 있습니다. JDK은 그 얼마나 편리한 내부에서 볼 수있다 :
출처 :
공용 문자열 (대상의 CharSequence, CharSequence를 교체) 교체 { 복귀 는 Pattern.compile (target.toString () Pattern.LITERAL) .matcher ( 이 ) .replaceAll (Matcher.quoteReplacement (replacement.toString ())); }
재생 사고
음, 설명하는 다음 장면은 순전히 허구이며 구덩이 계단처럼 유사하더라도, 그것은해야합니다! 오늘 당신은 제품 MM은 귀하의 웹 사이트에 "삐 일부 비우호적 인 의견의 사용을 필요로하는 기능을 구현 찾을 ~ "마스크를하지만, 판사 비우호적 인 기능은 더 복잡하다, NLP를 사용하기 때문에 사용되는 알고리즘 동료를 제공하기 위해 인터페이스 판단, 그 다음 일은 간단하다 : 우리가 자연 언어 처리 기준 대상으로하려면 string.replace (대상, 교체)로 문자열을 반환에 필요한 후 잘 교체로 "삐 ~". 난 당신이 곧 숙련 된 다음 코드를 노크 수 지직 것으로 판단 :
// 내용을 판단 NLP 비우호적 인 인터페이스를 호출 목록 <문자열> waitForReplace = callRpcNLP (텍스트), IF (waitForReplace == null의 || waitForReplace.size () == 0 ) { 반환 ; } // 하나 (와) 하나 컨버터 (고조파) 에 대한 (문자열 대상 : waitForReplace는) { IF (대상 == null이 ) { 계속 ; } text.replace (대상, "삐 ~" ); }
좋은 외모뿐만 아니라, 내 코드는 정말 아름답고 건강한 서면 확인의 다양한 있습니다, 당신은 도움이되지만 이미 자신의 걸작에 푹 빠졌 수 없습니다, 그것은 그래서 아무 문제가 없다?
사실, 시간으로 실제 실행 메모리는 버스트! ! !
사례 분석
이유 중 하나
그래서, 디버그에서, 우리는 방법을 대체 할 위치 무슨 일이 있었는지 결국, 그것은 발견 된 원격 RPC 인터페이스는 빈 문자열 ""반환하기 때문에 그 대체 기준 대상으로 빈 문자열을, 어떤 문자열과 일치하는 것보다 더 성공적인 일치 번. 우리는 다음 실험을 할 수있는 단순한 문자열 포인트를 사용 : 문자열 텍스트 = "여보세요"를 , 에서 System.out.println (text.replace를 ( "", "*"));
인쇄 :
삐 ! E H 삐 삐 삐 오 리터 리터 삐 삐 !!!!!
우리는 "~ 삑."대체 문자열은 여섯 등장 것을 알 수 있습니다 즉, 간단한 "안녕하세요"문자열은 repalce 실행 한 후, "입니다 텍스트의 인사"하지만 큰 절, "일치하는 장소는 6시에 교체 할 필요가 있으므로이 아닌 경우" 수천 개의 단어 논문이? 여기, 우리는 ""진실에서 매우 가까이왔다 여러 문자열 일치를 대체하는 방법을하게됩니다. 이는 이유 중 하나 버스트 메모리입니다.
두 번째 이유
또 다른 이유에 관해서는, 당신은 문자를 달성하기 위해 API를 호출하여 내부가 실제로 정규 표현식 관련이 대체 달성 교체, 위에서 언급 한 문자열 일치, 우리는 쉽게 사실, 정규 표현식 생각할 수 아래라고해야 문자열 일치. 또 다른 이유를 들어 두 XXXXXXXXXX 이유, 당신은, 사실, API를 호출하여 내부가 실제로 정규 표현식 관련이 교체, 위에서 언급 한 문자열 일치, 우리는 쉽게 정규 표현식 생각할 수 달성 교체에 따라 말을 스트링 매칭 달성했다. 문자열 사실, 타겟의 매우 복잡한 동작 대체 (대상, 여분) 인 달성하는 정규 표현 매칭,이 양 식 칭한다 "모드"(패턴), 및 상기 매칭 과정에서 시간이 필요 문자는 문자열 아웃 모드를 일치합니다. 경기가 성공하면 "*"패턴이 다음 문자로 와서 경기의 다음 라운드를 계속했다, 다음 문자열을 마련, 그러나 우리는 정규 표현식 지원 도트를 사용하여이 "."모든 문자, 별표와 일치하는지 알고 프로세스가 재귀 적 일치가 필요하므로, 하나는 단순히이 완료되는 문자열 매칭 포인터를 이동할 수 없습니다, 문자의 수와 일치. 개요
-
참조 대상뿐만 아니라 NULL 체크 할 필요가에, 당신은 ""할 빈 문자열 검사 필요
-