我没有看到错误。 (Mailto 的转换代码)
I don't see the mistake. (Conversion code for Mailto)
我的意图是为 mailto 转换一个字符串,但是我发现了一个问题,当我设置 breakline 时全部删除并只设置最后一行。
public String mailto(String texto){
String total="";
for (int i = 0; i < texto.length(); i++)
if (texto.charAt(i)!=' ' && texto.charAt(i)!='\n'{
total += texto.charAt(i);
} else {
if(texto.charAt(i)==' ') {
total = total + "%20";
} else {
if(texto.charAt(i)=='\n'){
total = total + "%0D%0A";
}
}
}
}
return total
}
public String mailto(String texto){
String total="";
for (int i = 0; i < texto.length(); i++)
if(texto.charAt(i)==' ') {
total = total + "%20";
} else if(texto.charAt(i)=='\n'){
total = total + "%0D%0A";
} else {
total += texto.charAt(i);
}
}
return total
}
为了减少测试次数,您可以反转逻辑:首先检查 ' '
和 '\n'
。
不要hand-rollURL编码(很容易出错!),使用现有的URLEncoder
。
public String mailto(String texto) {
return URLEncoder.encode(texto);
}
请注意,这会产生略有不同(但有效)的结果:space 被编码为 +
而不是 %20
。
如果出于某种原因您 want/need 编写自己的 ad-hoc 电子邮件编码器,您可以使用 String.replace
:
来缩短您的代码
public String mailto(String texto) {
return texto.replace(" ", "%20").replace("\n", "%0D%0A");
}
如果您关心性能(实际测量时要小心!),请不要通过连接构造字符串,而是使用 StringBuilder
。
连同您的代码修复以及为提高可读性而进行的轻微重写,这会产生
public String mailto(final String texto) {
final StringBuillder sb = new StringBuilder();
for (int i = 0; i < texto.length(); i++) {
final char c = texto.charAt(i);
if (c == ' ') {
sb.append("%20");
} else if (c == '\n') {
sb.append("%0A%0D");
} else {
sb.append(c);
}
}
return sb.toString();
}
我的意图是为 mailto 转换一个字符串,但是我发现了一个问题,当我设置 breakline 时全部删除并只设置最后一行。
public String mailto(String texto){
String total="";
for (int i = 0; i < texto.length(); i++)
if (texto.charAt(i)!=' ' && texto.charAt(i)!='\n'{
total += texto.charAt(i);
} else {
if(texto.charAt(i)==' ') {
total = total + "%20";
} else {
if(texto.charAt(i)=='\n'){
total = total + "%0D%0A";
}
}
}
}
return total
}
public String mailto(String texto){
String total="";
for (int i = 0; i < texto.length(); i++)
if(texto.charAt(i)==' ') {
total = total + "%20";
} else if(texto.charAt(i)=='\n'){
total = total + "%0D%0A";
} else {
total += texto.charAt(i);
}
}
return total
}
为了减少测试次数,您可以反转逻辑:首先检查 ' '
和 '\n'
。
不要hand-rollURL编码(很容易出错!),使用现有的URLEncoder
。
public String mailto(String texto) {
return URLEncoder.encode(texto);
}
请注意,这会产生略有不同(但有效)的结果:space 被编码为 +
而不是 %20
。
如果出于某种原因您 want/need 编写自己的 ad-hoc 电子邮件编码器,您可以使用 String.replace
:
public String mailto(String texto) {
return texto.replace(" ", "%20").replace("\n", "%0D%0A");
}
如果您关心性能(实际测量时要小心!),请不要通过连接构造字符串,而是使用 StringBuilder
。
连同您的代码修复以及为提高可读性而进行的轻微重写,这会产生
public String mailto(final String texto) {
final StringBuillder sb = new StringBuilder();
for (int i = 0; i < texto.length(); i++) {
final char c = texto.charAt(i);
if (c == ' ') {
sb.append("%20");
} else if (c == '\n') {
sb.append("%0A%0D");
} else {
sb.append(c);
}
}
return sb.toString();
}