У меня есть вопрос относительно indexOf()
. Я пытаюсь запрограммировать EmailExtractor
(Да, это домашнее задание, но я не ищу код), который извлекает весь адрес электронной почты из предложения, которое вводится пользователем.Поиск n-го вхождения символа в строке с использованием IndexOf()
Например: Пользовательский ввод: напишите нам по адресу [email protected] с вашими запросами. Затем программа отобразит [email protected] из вышеперечисленного String
. Я понимаю, indexOf()
и substring()
не требуется.
Идея, которую я имею сейчас, - использовать indexOf()
, чтобы найти «@», а затем искать пустое пространство непосредственно перед адресом электронной почты, введенным пользователем (nth).
Мой код выглядит следующим образом:
System.out.println("This is an Email Address Extractor.\n");
System.out.print("Enter a line of text with email address: ");
String emailInput = scn.nextLine();
int spaceAt = emailInput.indexOf(" ");
for (int i = 1; i <= emailInput.indexOf("@"); i++){
if (spaceAt < emailInput.indexOf("@")) {
spaceAt = emailInput.indexOf(" ", spaceAt + 1);
}
}
Я понимаю и знаю проблемы в моем коде.
1) "Mail us at [email protected] with your queries".indexOf(" ")
is 4, я пытаюсь получить 10. Однако условие IF, которое у меня есть, заставит его перейти к следующему экземпляру indexOf(), который равен 25. (Потому что 10 < 14).
Как я могу избежать этого?
Еще раз, я не ищу чисто ответ, скорее, я пытаюсь решить проблему. Заранее спасибо!
Нужно ли использовать метод indexOf? –
Почему бы вам не разбить String, а затем найти, в каком из них есть '@'? –
Простым решением является использование некоторой другой переменной вместо 'spaceAt' для хранения результата' mailInput.indexOf ("", ...) 'и убедитесь, что результат меньше индекса' @ '. Затем присвойте 'spaceAt' этому результату * только *, если он меньше. В противном случае вы можете использовать 'break', чтобы выйти из цикла' for', так как вы закончили поиск. Это пример «lookahead», т. Е. Вам нужно посмотреть на следующий результат, чтобы увидеть, приемлемо ли это, прежде чем вы его используете. Также подумайте о том, что произойдет, если больше нет пробелов, когда вы делаете свой 'indexOf'. – ajb