2014-10-22 2 views
2

JSoup을 사용하여 이미지를 긁어 내려고했는데 비틀 거리는 코드를 이해하지 못했습니다. 코드의src 속성 (url)에서 이미지 이름 추출

부 :

private static void getImages(String src) throws IOException { 

    String folder = null; 

    //Exctract the name of the image from the src attribute 
    int indexname = src.lastIndexOf("/"); 

    if (indexname == src.length()) { // Don't understand this 
     src = src.substring(1, indexname); 
    } 

    indexname = src.lastIndexOf("/"); 
    String name = src.substring(indexname, src.length()); 

    // more code 
} 

나는 if 문을 이해하지 못하는 (SRC이 경우는 절대 URL로 정의된다). 더 구체적으로, indexname은 언제 src의 길이와 같습니까?

+2

'indexname == src.length()'이면'String'은 슬래시로 끝납니다. –

+0

문자열 src가 백 슬래시로 끝나는 지 확인합니다. 이 경우 백 슬래시로 끝나는 경우에도 URL의 마지막 섹션을 가져 오는 방식으로이를 제거하고 다시 검사합니다. –

+3

@ElliottFrisch no. 이 코드에는 버그가 있습니다. indexname은 src.length()와 결코 같지 않습니다. –

답변

1

인터넷에서 찾은 모든 소스가 좋다고 가정하지 마십시오.

그 코드에는 많은 문제가 있습니다.

  1. String.lastIndexOf의 결과가 원본 문자열의 길이 인 유일한 경우는 검색 문자열이 ""인 경우입니다. 따라서 if 블록이 실행되지 않습니다.
  2. if 블록 내의 작업 (문자열의 첫 번째 문자 삭제)은 실제로 도움이되지 않습니다.
  3. URL에 이미지 이름 뒤에 슬래시를 추가하는 것은 완전히 합법적입니다. URL의 이미지 이름에 '? /'를 추가하십시오.
  4. 이미지 이름을 전혀 사용하지 않는 것이 좋습니다. "http://example.com/generate-captcha.php?param1=foo&param2=bar"(실제 링크가 아닌 예)과 같은 매개 변수가있는 스크립트의 이름이있을 수 있습니다.
  5. 도메인 이름 뒤에 아무 것도 쓸 수 없습니다. URL을 실제로 지난 슬래시 후 파일 이름을 가지고 있는지, 또는 파일 이름이 실제 이미지의 이름을 가지고 있다고 할 법이 없기 때문에

는,이 코드의 일부를 작동 시간.