2014-01-27 5 views
0

Я написал код на Java, чтобы вернуть строку информации между двумя последовательностями символов. Мой код:Проблема с шаблоном и матрицей

String caseDefendant = "vs."; 
Pattern caseDefendantPattern = Pattern.compile("(?<="+Pattern.quote(caseDefendant)+").*?(?=</span>)"); 
Matcher caseDefendantMatcher = caseDefendantPattern.matcher(pageContentString); 

while (caseDefendantMatcher.find()) { 
    docketFile.write(caseDefendantMatcher.group().toString()); 
} 
docketFile.write("^"); 

То, что я пытаюсь сделать, это вернуть информацию между vs. и </span>. Эта проблема заключается в том, что в строке «pageContentString» последовательность vs.INFORMATION</span> происходит дважды, поэтому, когда я отправляюсь писать ее в файл, она записывается дважды, а не один раз, когда мне нужна только одна информация, записанная один раз. Например, если pageContentString был:

"vs.info1</span> aaabbbccc vs.info1</span>" 

Мой файл записывается в виде info1 info1. Как мне изменить свой код, чтобы он не записывал вторую группу информации?

+0

Вы всегда можете добавить 'break' после' docketFile.write (... 'линии, прямо – dasblinkenlight

+0

ли вы должны использовать цикл здесь? ? Вы можете просто использовать 'if' вместо' while'? Также 'toString()' не требуется в вашем коде, потому что 'group' уже возвращает String. – Pshemo

+0

Что произойдет, если вы выберете caseDefendantMatcher.find() из среды Если вам нужен только первый найденный элемент, вы не должны останавливаться после первого матча? Я не согласен с моим Java-выражением :) –

ответ

1

У вас есть цикл здесь:

while (caseDefendantMatcher.find()) { 
    docketFile.write(caseDefendantMatcher.group().toString()); 
} 

Этот цикл будет найти и распечатать все матчи. Если вы хотите только первый матч, то не цикл:

String caseDefendant = "vs."; 
Pattern caseDefendantPattern = Pattern.compile("(?<="+Pattern.quote(caseDefendant)+").*?(?=</span>)"); 
Matcher caseDefendantMatcher = caseDefendantPattern.matcher(pageContentString); 

if (caseDefendantMatcher.find()) { 
    docketFile.write(caseDefendantMatcher.group().toString()); 
} 

docketFile.write("^"); 
+0

Ничего себе, не знаю, как я пропустил это. Новое в Regex, спасибо! – Ctech45

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