2015-01-27 2 views
3

Я хочу извлечь подстроку из строки url. Это URL:Java extract substring from url string

https://test.tech.com/public/pi?id=635106391297495358_0_280740c3f281419b954b309b45a41d77-M_M_0_56b6f628b90b4146abbdba1de9095657 

Я хочу, чтобы начать извлечение из ид =

635106391297495358_0_280740c3f281419b954b309b45a41d77 

до тире (-), а затем извлечь оставшиеся подстроки

M_M_0_56b6f628b90b4146abbdba1de9095657 

Обратите внимание, что точный домен не тот, что указан выше, это просто пример.

Любые идеи? Я с радостью порекомендую вам вашу помощь. Благодарю.

UPDATE:

это то, что я сделал до сих пор:

final URI uri = URI.create(result.getContents()); 
        final String path = uri.getPath(); 
        path.substring(path.lastIndexOf('-') + 1); 
        Log.e("EXTRACTED", "" + path); 

Но это только получает открытый/пи.

+1

Alrite, есть у пытался что-то, любое регулярное выражение? –

+1

@JunedAhsan yup. Я попробовал lastIndexOf. Будет обновлять мой пост. –

ответ

2

Прежде всего, uri.getPath() возвращает компонент пути, но что вы ищете, это после?, так что вы можете попробовать вместо этого - uri.getQuery().

Что касается соответствия:

Pattern p = Pattern.compile("id=(.+?)-"); 
Matcher m = p.matcher(uri.getQuery()); 
if (m.find()) { 
    System.out.println(m.group(1)); 
} 

Не тестировался, но я думаю, что он должен работать. (.+?) - группа захвата, которая пытается совместить символы между id= и -.

+0

спасибо, что это работает, как насчет оставшейся части ури? –

+0

, тогда регулярное выражение было бы как 'id = (. +?) - (. +)', И вы могли бы вызвать 'm.group (1)' и 'm.group (2)'; вы всегда можете посмотреть документацию для [Matcher] (http://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html) или [Pattern] (http: // docs .oracle.com/javase/7/docs/api/java/util/regex/Pattern.html) для получения дополнительной помощи. рад, что он работает! – gengkev

+0

Спасибо за объяснение чувака! –

1

Одна из основных проблем является то, что:

path.substring(path.lastIndexOf('-') + 1); 

не будет изменять переменную пути. Причина в том, что String неизменяемы, и любое изменение для них создает внутреннюю внутреннюю строку. Если вы хотите, чтобы овладеть новой ссылки подстроки, то вам нужно назначить его обратно path:

path = path.substring(path.lastIndexOf('-') + 1); 

Теперь вы можете попробовать еще опционов подстроку

+0

если вы объясните это почему? я буду проголосовать u вверх –

+1

@KickButtowski Просто сделал ... –

+0

@JunedAhsan Я все еще получаю общественность/pi –

1

Вот решение, которое, я надеюсь, это Спроецировать

public static void main(String[] argv) { 
    final String uriStr = "https://test.tech.com/public/pi?id=635106391297495358_0_280740c3f281419b954b309b45a41d77-M_M_0_56b6f628b90b4146abbdba1de9095657"; 
    final URI uri = URI.create(uriStr); 
    final String query = uri.getQuery(); 
    System.out.println(String.format("EXTRACTED QUERY [%s]", query)); 
    final String part1 = query.substring(query.indexOf('=')+1, query.indexOf('-')); 
    System.out.println(String.format("EXTRACTED PART 1 [%s]", part1)); 
    final String part2 = query.substring(query.indexOf('-')+1); 
    System.out.println(String.format("EXTRACTED PART 2 [%s]", part2)); 
} 

} *

Вот результат: ДОБЫТАЯ QUERY [ID = 635106391297495358_0_280740c3f281419b954b309b45a41d77-M_M_0_56b6f628b90b4146abbdba1de9095657]

ВЫПОЛНЕННАЯ ЧАСТЬ 1 [635106391297495358_0_280740c3f281419b954b309b45a41d77]

ДОБЫТАЯ ЧАСТЬ 2 [M_M_0_56b6f628b90b4146abbdba1de9095657]

2
final URI uri = URI.create("https://test.tech.com/public/pi?id=635106391297495358_0_280740c3f281419b954b309b45a41d77-M_M_0_56b6f628b90b4146abbdba1de9095657"); 
    String queryString = uri.getQuery(); 
    String subString = queryString.substring(queryString.lastIndexOf('-') + 1); 
    System.out.println("EXTRACTED " + subString); 

Производит:

экстрагированных M_M_0_56b6f628b90b4146abbdba1de9095657