Как из ссылки спарсить необходимый тип?

245
02 марта 2017, 23:24

В ссылке передается тип файла, который необходимо подставить к названию файла при загрузке. Он всегда идет после file%2c, как его оптимально вытянуть? Может есть пример с помощью JSOUP?

https://site.com/download?resid=7257139334599!7571&authkey=!AKRZu44V2I1I&ithint=file%2cpdf

или

https://site.com/download?resid=76CC13Arr773BD!3049&ithint=file%2cdocx&app=Word&authkey=!AKrtQi2maRE

как по мне не очень удачный вариант:

private String getTypeFile(String typeFile) {
    Pattern pt = Pattern.compile("(%2c)");
    Matcher mt = pt.matcher(typeFile);
    if (mt.find()) {
        return typeFile.substring(mt.start() + 3, mt.start() + 6);
    }
    return null;
}
Answer 1
   String str = "https://site.com/download?resid=7257139334599!7571&authkey=!AKRZu44V2I1I&ithint=file%2cpd42rerfds=13=32&?f";
    Pattern pattern = Pattern.compile("file%2(.+)[a-z=?&.//_0-9]+");
    Matcher matcher = pattern.matcher(str);
    while (matcher.find())
    { System.out.print(str.substring(matcher.start()+6,matcher.end()) + " "); }
    System.out.println();

ищутся совпадения "file%2" и после подставляешь символы какие должны выводиться.

Answer 2

Самое тривиальное решение:

private String getFileExtension(String link) {
    int p1 = link.indexOf("file%2c");
    if (p1 == -1) {
        throw new IllegalArgumentException("Incorrect link!");
    }
    p1 += 7; // "file%2c".length() == 7
    int p2 = link.indexOf("&", p1);
    return p2 == -1 ? link.substring(p1) : link.substring(p1, p2);
}

Если разработка ведется с использование Android SDK, то можно воспользоваться методом getQueryParameter(...) класса android.net.Uri.

Answer 3

Если действительно file. всегда присутствует:
String.split

typeFile.split("file%2c")[1].split("&")[0];

Иначе, можно добавить:

if (!typeFile.contains("file%2c")) return null;

Более правильным конечно будет парсить URI как URI.
Пример (опуская обработку ошибок):

MultiValueMap<String, String> parameters =
        UriComponentsBuilder.fromUri(new URI(typeFile)).build().getQueryParams();
String fileName = parameters.get("ithint").get(0);
String ext = FilenameUtils.getExtension(fileName);
READ ALSO
Может ли фрагмент быть анонимным?

Может ли фрагмент быть анонимным?

Создал кастомный DialogFragment с допметодами для быстрого построение диалога из активити

334
Как вырезать число из строки?

Как вырезать число из строки?

От сервера приходит число в виде строки:

342
Сдвиг даты на день с выходных

Сдвиг даты на день с выходных

Необходимо сделать так, чтобы при попадании очередной даты на субботу, дата сдвинулась на пятницу и, соответственно, с воскресенья на понедельник

272
А можно упростить XML файл конфигураци Spring?

А можно упростить XML файл конфигураци Spring?

Ну я сразу скажу, что только начинаю изучать Spring, так что не судите очень строгоПоймал себя на том, что пишу в файле конфигурации одно и то же

191