2016-08-13 2 views
0

이것은 실제로 에서 코드북으로 이동하는 연습 문제입니다. 문제의 정의는 다음과 같습니다.지정된 하위 문자열을 Java로 삭제

주어진 문자열에서 "del"이라는 문자열이 인덱스 1에서 나타나는 경우 해당 "del"이 삭제 된 문자열을 반환하십시오. 그렇지 않으면 문자열을 변경하지 않고 반환합니다.

  • delDel ("adelbc") "aHello"→ "ABC"
  • delDel ("adelHello")
  • delDel ("adedbc") "adedbc"→

→ 다음과 같이 나의 작업은 다음과 같습니다

public String delDel(String str) { 
    String del = "del"; 

    if (str.indexOf(del, 1) == 1){ 
    str.replaceFirst("del", null); 
    } 

    return str; 
} 

그것은 대부분의 경우에 대해 잘 작동하지만 내가 NullPoi를 얻을 수 "adelbc", "adelHello"및 "adel"의 경우는입니다. 나는 왜 그런지 이해할 수 없다. 당신은 오픈 JDK 소스에 자세히 보면

+0

나는 CodingBat이 주어진 시그니처가있는 함수를 제공하고 테스트를 실행해야한다고 가정합니다. – mszymborski

+5

null 대신에 ""'- 빈 문자열 -을 사용한다면 어떨까요? 어쩌면 JRE는 대체 문자열에서 뭔가를 실행합니다. 여기에 null을 사용하는 것은 아주 이상합니다. – mszymborski

+1

그냥 로컬에서 테스트했습니다. 'null'을 대체 할 문자열로 사용하면'NullPointerException'을 던집니다. ''''당신이하고 싶은 일이 분명합니다. – MattDs17

답변

4

, 당신은 replaceFirst라고 위임 단계를 교체 본 프로그램 포함, 정규 표현식 기능으로 작동하는지 알게 될 것이다 : 대체 null이 될 수 없다는

public String replaceFirst(String replacement) { 
    if (replacement == null) 
     throw new NullPointerException("replacement"); 
    reset(); 
    if (!find()) 
     return text.toString(); 
    StringBuffer sb = new StringBuffer(); 
    appendReplacement(sb, replacement); 
    appendTail(sb); 
    return sb.toString(); 
} 

참고. JRE의 다른 구현에서 동작이 비슷하다고 가정합니다. 대체 문자로 null 대신 "" - 빈 문자열 -을 사용하십시오.

cricket_007의 주석에서 언급했듯이 replaceFirst의 결과는 원래 문자열에 영향을 미치지 않으므로 (Java의 모든 문자열은 변경할 수 없음) 반환하기 위해 결과를 저장하려고합니다. 코드의 마지막 부분 :

public String delDel(String str) { 
    String del = "del"; 

    if (str.indexOf(del, 1) == 1){ 
    return str.replaceFirst("del", ""); 
    } 

    return str; 
} 
+0

@ cricket_007 : 죄송합니다. 다행히도 편집 권한이 있습니다.) – mszymborski

관련 문제