2015-06-20 3 views
0

Я хотел бы знать, является ли их функция в JAVA, которая позволяет извлекать из огромной строки последовательность символов, содержащую специальный символ.Как получить последовательность символов из String, которая содержит искомую строку

Пример: У меня есть php-страница, которую я стробировал, и я проверяю, есть ли последовательность символов, содержащая символ «@». Если это так, я хотел бы получить только всю последовательность символов, содержащую искомый символ.

Я могу использовать String.contains ("@"), чтобы искать символ, но как получить char, который его содержит?

Заранее благодарен!

+0

Что вы имеете в виду под «последовательностью полукокса, которая содержит символ»? Вся строка представляет собой последовательность символов, которая содержит ее. Итак, какую последовательность символов вы имеете в виду? – RealSkeptic

+0

Представьте себе, что «mailto = [email protected]» - это целая строка. Я должен знать, что строка содержит искомый символ «@», но теперь как получить «[email protected]» ... –

+0

Вы должны быть в состоянии определить набор символов, предшествующих и/или следующих за '@' чтобы разграничить окружающую подстроку. – laune

ответ

2

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

«MAILTO = ([email protected]

Если это находится в строковом PHP, вы можете легко извлечь скобки раздела.

Но, скорее всего, это может быть и [email protected], поэтому вам, возможно, придется написать более сложное регулярное выражение, но оно будет работать одинаково.

Вот версия соответствие любой действительный адрес электронной почты:

"mailto = ([A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+(?:\\.[A-Za-z]){1,3}\\b)" 

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

"mailto ?= ?(...)" 

Чтобы выполнить матч , используйте

Pattern pat = Pattern.compile("mailto = ([A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+(?:\\.[A-Za-z]){1,3}\\b)"); 

и, с php в строке, вы можете then do

String php = ...; 
Matcher mat = pat.matcher(php); 
if(mat.find()){ 
    String email = mat.group(1); 
} 

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

См. another SO Q+A для обсуждения регулярного выражения, соответствующего адресу электронной почты.

+0

Большое спасибо за ваш вклад :) –

+0

Я только заметил, что у шаблона, который я схватил где-то, отсутствовали круглые скобки, чтобы совместить повторяющиеся «.xxx» во второй части. исправлено. – laune

+0

И обратите внимание, что другие SO Q + A я добавил к моему ответу. – laune

0

Для поиска и извлечения подстроки вы можете использовать комбинацию indexOf и substring.

Без дополнительной информации о том, как источник и искомая строка выглядят так, что вам тяжело помочь.

+0

Пожалуйста, не пишите комментарии как ответы. – laune

+0

@laune Я думал, что этот был на линии, но я ценю вашу обратную связь. – wonderb0lt

+1

Если бы вы скопировали его с фрагментом кода, я бы согласился с вами. – laune

1

Поскольку регулярное выражение идея уже принято, вот еще один подход

String test = "abc 123 [email protected] abcde"; 
String charToFind = "@"; 

String strings[] = test.split(" "); 
for(String str : strings){ 
    if(str.contains(charToFind)){ System.out.println(str); } 
} 
Смежные вопросы