Я пытаюсь проанализировать строку 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
Я не могу просто удалить все пробелы из строки, потому что есть определенные значения, которые имеют пробел.
4 ответа
Исходя из того, что вы сказали, вы можете просто сделать:
string.replace("= ","=");
Если вы хотите только изменить ключ p_videoepnumber
:
string.replace("p_videoepnumber= ","p_videoepnumber=");
// Using regex:
string.replaceAll("(p_videoepnumber=)(\\s+)","$1");
Итак, в этой строке:
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");
}
Вы можете использовать метод 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);
Этот RegEx может помочь вам в этом. Он просто создает группу между двумя границами, где пробелы могут быть:
p_videoepnumber=(\s+)[0-9]+,
Вы можете просто вызвать эти пробелы с помощью
$1
и заменить его пустой строкой''
.Вы также можете добавить дополнительные границы к этому выражению, если хотите.
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].