URL에서 잘못된 수의 슬래시를 확인하고 수정하는 방법은 무엇입니까?

J. Olufsen

예상대로 작동하지 않는 코드가 있습니다. 아이디어는 url에서 슬래시를 사용하여 그룹을 일치시키는 것입니다. 슬래시의 수는 1 개 이상이어야합니다. 알고리즘은 슬래시의 수를 두 개로 만 바꿔야합니다. 코드를 수정하는 방법?

HttpURLConverter

public class HttpURLConverter {

    final private String UrlPattern = "((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[\\-;:&=\\+\\$,\\w]+@)?[A-Za-z0-9\\.\\-]+|(?:www\\.|[\\-;:&=\\+\\$,\\w]+@)[A-Za-z0-9\\.\\-]+)((?:\\/[\\+~%\\/\\.\\w\\-_]*)?\\??(?:[\\-\\+=&;%@\\.\\w_]*)#?(?:[\\.\\!\\/\\\\\\w]*))?)";

    URL validateURL(URL url) throws MalformedURLException {
        URL validURL = null;
        if(!Pattern.matches(UrlPattern, url.toString())){
            if(Pattern.matches("(https?|ftp|file):.*", url.toString())){
                Matcher matcher = Pattern.compile("(https?|ftp|file):(\\/)*([A-za-z0-9\\.\\-?#_]+)([A-za-z0-9\\.\\-?#_\\/]{0,})", Pattern.CASE_INSENSITIVE).matcher(url.toString());

                List<String> allMatches = new ArrayList<String>();
                while (matcher.find()) {
                       allMatches.add(matcher.group());
                }
                if(allMatches.size() > 1){
                    System.out.println(allMatches.get(2));
                    allMatches.set(2, "//"); // replace any number of slashes with only two
                    validURL = new URL(allMatches.toString());

                }else{
                    throw new RuntimeException("Expected slashes after URL shema definition but found none.");
                }
                System.out.println(matcher.group(1));
                System.out.println(matcher.group(2));
                System.out.println(matcher.group(3));
                    System.out.println(matcher.group(4));

            }else{
                throw new RuntimeException("Given url is not valid. URL shema is not detected");
            }
        }
        return validURL;
    }

}

테스트

@Test
    public void testHttpURLConverter2() throws MalformedURLException{
        assertEquals("http://google.com", new HttpURLConverter().validateURL(new URL("http:///google.com")));
    }
@Test
    public void testHttpURLConverter2() throws MalformedURLException{
        assertEquals("http://google.com", new HttpURLConverter().validateURL(new URL("http:/google.com")));
    }
요리

이것이 제가 생각해 낼 수있는 최적의 솔루션입니다. 100 % 성공 결과를 얻으려면 계속 확인하고 추가 처리해야합니다. 이 메소드는 두 테스트 입력 모두에 대해 검증 된 URL을 인쇄합니다.

import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class HttpURLConverter {

    final private String UrlPattern = "((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[\\-;:&=\\+\\$,\\w]+@)?[A-Za-z0-9\\.\\-]+|(?:www\\.|[\\-;:&=\\+\\$,\\w]+@)[A-Za-z0-9\\.\\-]+)((?:\\/[\\+~%\\/\\.\\w\\-_]*)?\\??(?:[\\-\\+=&;%@\\.\\w_]*)#?(?:[\\.\\!\\/\\\\\\w]*))?)";

    URL validateURL(URL url) throws MalformedURLException {
        //System.out.println(url);
        URL validURL = null;
        if (!Pattern.matches(UrlPattern, url.toString())) {
            if (Pattern.matches("(https?|ftp|file):.*", url.toString())) {
                Matcher matcher = Pattern
                        .compile("(https?|ftp|file):(\\/)*([A-za-z0-9\\.\\-?#_]+)([A-za-z0-9\\.\\-?#_\\/]{0,})", Pattern.CASE_INSENSITIVE)
                        .matcher(url.toString());

                List<String> allMatches = new ArrayList<String>();
                while (matcher.find()) {
                    allMatches.add(matcher.group());
                }

                for (String str : allMatches) {
                    String regex = "(\\/)+";
                    str = str.replaceAll(regex, "//");
                    validURL = new URL(str);
                    System.out.println("Validated URL : " + validURL);
                }

            } else {
                throw new RuntimeException("Given url is not valid. URL shema is not detected");
            }
        }

        return validURL;
    }

    public static void main(String[] args) throws MalformedURLException {
        new HttpURLConverter().validateURL(new URL("http:////google.com"));
    }

    }

다음과 같은 출력이 표시됩니다.

http:////google.com
Validated URL : http://google.com

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C에서 "munmap_chunk () : 잘못된 포인터"오류를 수정하는 방법은 무엇입니까?

분류에서Dev

브라우저 배율에서 잘못된 요소 크기를 수정하는 방법은 무엇입니까?

분류에서Dev

Leadtools OCR Form Recognise에서 잘못된 높이 / 너비 오류를 수정하는 방법은 무엇입니까?

분류에서Dev

UrlfetchApp을 사용하여 잘못된 URL 오류를 수정하는 방법은 무엇입니까?

분류에서Dev

ACC ATG를 여는 동안 잘못된 도움말 URL을 수정하는 방법은 무엇입니까?

분류에서Dev

Outlook에서 읽지 않은 이메일 플래그의 잘못된 수를 수정하는 방법은 무엇입니까?

분류에서Dev

C ++에서 부호있는 정수와 부호없는 정수의 잘못된 빼기를 감지하는 방법은 무엇입니까?

분류에서Dev

Pop OS에서 시스템 충돌 후 발생한 잘못된 형식의 특수 문자를 수정하는 방법은 무엇입니까?

분류에서Dev

Google+에서 특정 URL이 공유 된 횟수를 확인하는 방법은 무엇입니까?

분류에서Dev

잘못된 입력으로부터 libgdx 함수를 JSON에서 보호하는 방법은 무엇입니까?

분류에서Dev

내비게이션 바에서 잘못된 로고 정렬을 수정하는 방법은 무엇입니까?

분류에서Dev

잘못된 재설정의 결과를 수정하는 방법은 무엇입니까?

분류에서Dev

C ++에서 "오류 : 비 정적 데이터 멤버 'tree :: root'의 잘못된 사용"오류를 수정하는 방법은 무엇입니까?

분류에서Dev

IMAGE 수식에 사용 된 URL이 정확하고 이미지가 표시되는지 확인하는 방법은 무엇입니까?

분류에서Dev

식 컴파일 오류의 잘못된 시작을 수정하는 방법은 무엇입니까?

분류에서Dev

"그룹 기능의 잘못된 사용"오류를 수정하는 방법은 무엇입니까?

분류에서Dev

C # VS 2010에서 잘못된 인수 Int32.TryParse 오류를 수정하는 방법은 무엇입니까?

분류에서Dev

PHP에서 "foreach ()에 대해 제공된 잘못된 인수 경고"를 제거하는 방법은 무엇입니까?

분류에서Dev

"좋은"URL에서 "잘못된"URL을 필터링하는 방법은 무엇입니까? (구글의 눈에)

분류에서Dev

Flutter에서 카메라에서 잘못된 사진 회전을 수정하는 방법은 무엇입니까?

분류에서Dev

비동기 메서드에서 잘못된 입력 사례를 확인하는 방법은 무엇입니까?

분류에서Dev

"인쇄"를 사용할 때 잘못된 구문 오류를 수정하는 방법은 무엇입니까?

분류에서Dev

잘못된 fstab으로 인한 부팅 실패를 수정하는 방법은 무엇입니까?

분류에서Dev

Ubuntu에서 Intel MKL로 잘못된 결과를 생성하는 Octave를 수정하는 방법은 무엇입니까?

분류에서Dev

클래스의 할당 끝점에서 잘못된 요청을 해결하는 방법은 무엇입니까?

분류에서Dev

잘못된 날짜 형식을 반환하는 MessageFormatter를 수정하는 방법은 무엇입니까?

분류에서Dev

g ++처럼 잘못된 함수 포인터 변환에 대해 경고하도록 gcc에 지시하는 방법은 무엇입니까?

분류에서Dev

PreferenceActivity에서 입력을 확인하고 잘못된 값의 저장을 방지하는 방법은 무엇입니까?

분류에서Dev

IMAP에서 Exchange로 마이그레이션 한 후 Apple Mail에서 잘못된 날짜를 수정하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    C에서 "munmap_chunk () : 잘못된 포인터"오류를 수정하는 방법은 무엇입니까?

  2. 2

    브라우저 배율에서 잘못된 요소 크기를 수정하는 방법은 무엇입니까?

  3. 3

    Leadtools OCR Form Recognise에서 잘못된 높이 / 너비 오류를 수정하는 방법은 무엇입니까?

  4. 4

    UrlfetchApp을 사용하여 잘못된 URL 오류를 수정하는 방법은 무엇입니까?

  5. 5

    ACC ATG를 여는 동안 잘못된 도움말 URL을 수정하는 방법은 무엇입니까?

  6. 6

    Outlook에서 읽지 않은 이메일 플래그의 잘못된 수를 수정하는 방법은 무엇입니까?

  7. 7

    C ++에서 부호있는 정수와 부호없는 정수의 잘못된 빼기를 감지하는 방법은 무엇입니까?

  8. 8

    Pop OS에서 시스템 충돌 후 발생한 잘못된 형식의 특수 문자를 수정하는 방법은 무엇입니까?

  9. 9

    Google+에서 특정 URL이 공유 된 횟수를 확인하는 방법은 무엇입니까?

  10. 10

    잘못된 입력으로부터 libgdx 함수를 JSON에서 보호하는 방법은 무엇입니까?

  11. 11

    내비게이션 바에서 잘못된 로고 정렬을 수정하는 방법은 무엇입니까?

  12. 12

    잘못된 재설정의 결과를 수정하는 방법은 무엇입니까?

  13. 13

    C ++에서 "오류 : 비 정적 데이터 멤버 'tree :: root'의 잘못된 사용"오류를 수정하는 방법은 무엇입니까?

  14. 14

    IMAGE 수식에 사용 된 URL이 정확하고 이미지가 표시되는지 확인하는 방법은 무엇입니까?

  15. 15

    식 컴파일 오류의 잘못된 시작을 수정하는 방법은 무엇입니까?

  16. 16

    "그룹 기능의 잘못된 사용"오류를 수정하는 방법은 무엇입니까?

  17. 17

    C # VS 2010에서 잘못된 인수 Int32.TryParse 오류를 수정하는 방법은 무엇입니까?

  18. 18

    PHP에서 "foreach ()에 대해 제공된 잘못된 인수 경고"를 제거하는 방법은 무엇입니까?

  19. 19

    "좋은"URL에서 "잘못된"URL을 필터링하는 방법은 무엇입니까? (구글의 눈에)

  20. 20

    Flutter에서 카메라에서 잘못된 사진 회전을 수정하는 방법은 무엇입니까?

  21. 21

    비동기 메서드에서 잘못된 입력 사례를 확인하는 방법은 무엇입니까?

  22. 22

    "인쇄"를 사용할 때 잘못된 구문 오류를 수정하는 방법은 무엇입니까?

  23. 23

    잘못된 fstab으로 인한 부팅 실패를 수정하는 방법은 무엇입니까?

  24. 24

    Ubuntu에서 Intel MKL로 잘못된 결과를 생성하는 Octave를 수정하는 방법은 무엇입니까?

  25. 25

    클래스의 할당 끝점에서 잘못된 요청을 해결하는 방법은 무엇입니까?

  26. 26

    잘못된 날짜 형식을 반환하는 MessageFormatter를 수정하는 방법은 무엇입니까?

  27. 27

    g ++처럼 잘못된 함수 포인터 변환에 대해 경고하도록 gcc에 지시하는 방법은 무엇입니까?

  28. 28

    PreferenceActivity에서 입력을 확인하고 잘못된 값의 저장을 방지하는 방법은 무엇입니까?

  29. 29

    IMAP에서 Exchange로 마이그레이션 한 후 Apple Mail에서 잘못된 날짜를 수정하는 방법은 무엇입니까?

뜨겁다태그

보관