Я пытаюсь проанализировать строку URL, чтобы я мог проверить ее для тестирования. Моя строка выглядит

p_videoid=119110,p_videoepnumber= 0,p_videoairdate=NOT NULL,videoseason=null

Моя проблема для некоторых видео, есть пробел в p_videoepnumber = 0. Мне нужно найти подстроку, которая начинается с p_videoepnumber и заканчивается запятой, а затем удалить все пробелы.

Я хочу, чтобы мой конечный результат выглядел так:

p_videoid=119110,p_videoepnumber=0,p_videoairdate=NOTNULL,videoseason=null

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

-1
learningruby347 2 Май 2019 в 18:45

4 ответа

Лучший ответ

Исходя из того, что вы сказали, вы можете просто сделать:

string.replace("= ","=");

Если вы хотите только изменить ключ p_videoepnumber:

string.replace("p_videoepnumber= ","p_videoepnumber=");
// Using regex:
string.replaceAll("(p_videoepnumber=)(\\s+)","$1");

демонстрация

2
Benjamin Urquhart 2 Май 2019 в 15:56

Итак, в этой строке:

p_videoid=119110,p_videoepnumber= 0,p_videoairdate=NOT NULL,videoseason=null

Вы хотите поймать p_videoepnumber= 0,.

Первая идея, которая приходит на ум, - это попытка сопоставить p_videoepnumber= .*,, но она фактически захватит p_videoepnumber= 0,p_videoairdate=NOT NULL,.

Если вы хотите остановиться на первой запятой, вы на самом деле будете использовать неохотно matcher. Вы на самом деле будете соответствовать p_videoepnumber= .*?, (обратите внимание на дополнительное ?).

С этого момента, вот прокомментированный код:

String req = "p_videoid=119110,p_videoepnumber= 0,p_videoairdate=NOT NULL,videoseason=null";

// Add parenthesis to indicate the group to capture
String regex = "(p_videoepnumber= .*?,)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(req);

// find() finds the next subsequence of the input sequence that matches the pattern.
if (matcher.find()) {
    // Displays the number of found groups : 1
    System.out.println(matcher.groupCount());
    // Displays the found group : p_videoepnumber= 0,
    System.out.println(matcher.group(1));
    // Replace " " with "" in the first group and display the result : 
    // p_videoid=119110,p_videoepnumber=0,p_videoairdate=NOT NULL,videoseason=null
    System.out.println(matcher.replaceFirst(matcher.group(1).replaceAll(" ", "")));
} else {
    System.out.println("No match");
}
1
Arnaud Denoyelle 2 Май 2019 в 16:01

Вы можете использовать метод String.split:

String[] splitedString = "yourString".split(",");

А затем вы можете выполнить итерацию каждого элемента массива String и найти элемент, который начинается с p_videoepnumber

for(int i=0; i<splitedString.length; i++){
    if(splitedString[i].startsWith("p_videoepnumber"){
        splitedString[i] = splitedString[i].trim();
     }
}
String parsedString = String.join(",", splitedString);
1
Emma 28 Май 2019 в 23:19

Этот RegEx может помочь вам в этом. Он просто создает группу между двумя границами, где пробелы могут быть:

p_videoepnumber=(\s+)[0-9]+,
  • Вы можете просто вызвать эти пробелы с помощью $1 и заменить его пустой строкой ''.

  • Вы также можете добавить дополнительные границы к этому выражению, если хотите.

enter image description here

0
Emma 2 Май 2019 в 15:59