Java 我不知道';我看不出有错。(Mailto的转换代码)
我的意图是将一个字符串转换为mailto,但是,我发现了一个问题,当我设置“特征线”“全部删除”并只设置最后一行时Java 我不知道';我看不出有错。(Mailto的转换代码),java,string,mailto,for-in-loop,Java,String,Mailto,For In Loop,我的意图是将一个字符串转换为mailto,但是,我发现了一个问题,当我设置“特征线”“全部删除”并只设置最后一行时 public String mailto(String texto){ String total=""; for (int i = 0; i < texto.length(); i++) if (texto.charAt(i)!=' ' && texto.charAt(i)!='\n'{
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
}
公共字符串mailto(字符串texto){
字符串总数=”;
对于(int i=0;i
公共字符串mailto(字符串texto){
字符串总数=”;
对于(int i=0;i
为了减少测试次数,您可以颠倒逻辑:首先检查
'
和'\n'
不要手动滚动URL编码(很容易出错!),使用现有的URL编码
public String mailto(String texto) {
return URLEncoder.encode(texto);
}
请注意,这会产生一个稍微不同(但有效)的结果:空间编码为+
,而不是%20
如果出于某种原因,您希望/需要编写自己的特殊电子邮件编码器,您可以使用以下方法缩短代码:
如果您关心性能(请注意实际测量!),请不要通过串联构造字符串,而是使用
再加上代码的修复,以及轻微的重写以增加可读性,这将产生
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(最终字符串texto){
最终StringBuilder der sb=新StringBuilder();
对于(int i=0;i
第二个和第三个if语句应该检查='
和=='\n'
。替换更好,但正确的解决方案不是使用库函数进行URL编码吗?@Clashsoft你完全正确。我假设OP有一些理由手动滚动它,但谁知道呢。让我快速补充一下。我有替换的问题与此相同,当我放置\n仅捕获最后一行时,问题明显在于代码“\n”,我替换了\n System.lineSeparator(),仅此而已。谢谢
public String mailto(String texto) {
return texto.replace(" ", "%20").replace("\n", "%0D%0A");
}
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();
}