Если вы используете этот код на локальном сервере (т. е. ваш компьютер для целей разработки), он не отправит электронное письмо получателю. Что произойдет, он создаст файл .txt
в папке с именем mailoutput
.
В случае, если вы используете бесплатный сервисный сервис, например 000webhost
или hostinger
, эти поставщики услуг отключают функцию mail()
, чтобы предотвратить непреднамеренное использование электронной почты, спам и т. д. Я предпочитаю вас чтобы связаться с ними, чтобы узнать, поддерживают ли они эту функцию.
Если вы уверены, что поставщик услуг поддерживает функцию mail (), вы можете проверить это руководство по PHP для дальнейшей справки, PHP mail ()
Чтобы проверить, поддерживает ли ваша служба хостинга функцию mail (), попробуйте запустить этот код (не забудьте изменить адрес электронной почты получателя)
Надеюсь, что это помогли.
И когда я отлаживаю это, логика попадает в предложение .replace.
blockquote>Да, а затем вы отбрасываете возвращаемое значение.
Строки в Java неизменяемы - когда вы вызываете
replace
, он не меняет содержимое строки existing - он возвращает новую строку new с изменениями. Итак, вы хотите:sentence = sentence.replace("and", " ");
Это относится к всем методам в String (
substring
,toLowerCase
и т. Д.). Нет из них изменяют содержимое строки.Обратите внимание, что вам действительно не нужно делать это в состоянии - в конце концов, если предложение t содержат
"and"
, это не вредно для выполнения замены:String sentence = "Define, Measure, Analyze, Design and Verify"; sentence = sentence.replace("and", " ");
Вы должны повторно назначить результат замены, например:
sentence = sentence.replace("and", " ");
Имейте в виду, что класс String
является неизменным , а это означает, что все его методы возвращают новую строку и никогда не изменяют исходную строку на месте, поэтому результат вызова метода в экземпляре String
должен быть присвоен переменной или использоваться немедленно для изменения эффект.
Строки являются неизменяемыми , что означает, что их содержимое не может измениться. Когда вы вызываете replace(this,that)
, вы получаете совершенно новую строку. Если вы хотите сохранить эту новую копию, вам нужно назначить ее переменной. Вы можете перезаписать старую ссылку (a la sentence = sentence.replace(this,that)
или новую ссылку, как показано ниже:
public class Test{
public static void main(String[] args) {
String sentence = "Define, Measure, Analyze, Design and Verify";
String replaced = sentence.replace("and", "");
System.out.println(replaced);
}
}
В качестве примечания обратите внимание, что я удалил проверку contains()
, так как это ненужный вызов здесь. Если он не содержит его, заменитель просто не сможет выполнить какие-либо замены. Вам нужно только, чтобы он содержал метод, если то, что вы заменяете, отличается от фактического условия, которое вы проверяете.
contains()
, вызывающий проблему, - это не так. Это был ненужный звонок, но на самом деле это не вызвало никаких проблем. Проблема заключалась в игнорировании возвращаемого значения replace
, которое вообще не объясняется в ответе.
– Jon Skeet
4 October 2012 в 23:50
Вы ничего не делаете с возвращаемым значением replace
. Вам нужно назначить результат метода, который является новым String
:
sentence = sentence.replace("and", " ");
A String
неизменен в java. Такие методы, как replace
, возвращают новый String
.
Тест contains
не нужен: replace
будет просто no-op, если не являются экземплярами текст для замены.
package com.tulu.ds;
public class EmailSecurity {
public static void main(String[] args) {
System.out.println(returnSecuredEmailID("sample717@gmail.com"));
}
private static String returnSecuredEmailID(String email){
String str=email.substring(1, email.lastIndexOf("@")-1);
return email.replaceAll(email.substring(1, email.lastIndexOf("@")-1),replacewith(str.length(),"*"));
}
private static String replacewith(int length,String replace) {
String finalStr="";
for(int i=0;i<length;i++){
finalStr+=replace;
}
return finalStr;
}
}