2016-01-12 2 views
0

Так что у меня в настоящее время есть эта длинная строка, содержащая множество подстрок, но я хочу разобрать все подстроки, начинающиеся с «http».Разбор строки для получения определенных подстрок

Так сказать, моя строка выглядит следующим образом:

"художника": "Idina Менцель", "след": "Let It Go ", "файл": "http://madeupwebsite.com" ...

И это повторяется еще 20 раз. Значение У меня будет еще 20 веб-сайтов, которые я хочу разобрать.

В конце концов, цель состоит в том, чтобы иметь массив, содержащий все веб-сайты.

Я просматривал несколько веб-сайтов, я считаю, что лучший способ сделать это - использовать регулярное выражение, но я не слишком хорошо разбираюсь в динамическом разборе строк.

+7

Вы знаете, что у вас есть JSon? Вам просто нужен I lib для его обработки. Возможно, GSON. –

+1

@QQPrinti У вас действительно есть одна строка текста или ваш текст, как и другие комментарии, на самом деле структурированный JSON? –

+0

Это буквально одна строка. – QQPrinti

ответ

-1

Вы можете сделать что-то, как показано ниже с регулярным выражением:

String line1 = "\"artist\":\"Idina Menzel\",\"track\":\"Let It Go\",\"file\":\"http://madeupwebsite.com\""; 
String line2 = "\"artist2\":\"Idina Menzel\",\"track\":\"Let It Go\",\"file\":\"http://madeupwebsite2.com\""; 
//You use any string as source 

Pattern pattern = Pattern.compile("http://([^\"]*)"); 
Matcher matcher = pattern.matcher(line1+line2); 
while (matcher.find()) { 
     System.out.println("list of sites: " + matcher.group(1)); 
} 

Это утаишь:

list of sites: madeupwebsite.com 
list of sites: madeupwebsite2.com 

Вы можете увидеть: RegEx: Grabbing values between quotation marks для более подробной информации.

+0

Почему голосовать?! –

-1

Возможно, что вы, вероятно, сможете провести синтаксический анализ своей строки позже, добавьте пользовательский разделитель в конце каждой подстроки так же, как и при вводе ее в качестве ввода. Что-то вроде этого:

Scanner scan = new Scanner(System.in); 
int numOfLines = scan.nextInt(); // Give the number of substrings that you are going to give 
String S = ""; 
while(numOfLines>0) 
{ 
    S = scan.next()+"|"; // '|' is your custom delimiter (That symbol is LOGICAL OR symbol. 
    numOfLines--; 
} 

Это гарантирует, что подстрока находится между двумя «|». Позже вы можете использовать функцию split() для разделения всей строки с помощью пользовательского разделителя.

String[] listString = S.split("|"); 

Это создает массив подстрок, которые были найдены между 2 '|' s. Общее число таких подстрок, образованные, можно найти с помощью функции .Length

int n = listString.length; 

Для проверки подстрока является ли URL, вы можете скачать Apache Commons Validator. Просто загрузите последнюю версию, добавьте ее в свой путь сборки Java. Затем создайте UrlValidator для проверки каждой отдельной строки.

UrlValidator url = new UrlValidator(); 
ArrayList<String> al = new ArrayList<String>(); 
while(n>0) 
{ 
    String temp = listString[n-1]; 
    if(url.isValid(temp)) 
    { 
     al.add(temp); 
    } 
    n--; 
} 
for(String print : al) //For-Each loop 
{ 
    System.out.println(print); 
} 

Надеюсь, это поможет. :)

+0

Почему голос? –

Смежные вопросы