【发布时间】:2017-05-16 16:44:00
【问题描述】:
我的代码有点问题。 我想通过一个带有for循环的字符串并将'*'替换为“**”,并将任何出现多次的字符替换为“*nc*”,其中n是出现次数,c是字符。
我正在使用 for 循环遍历字符串,但最后我只得到一个字母而不是完整的字符串。 如果我要输入“ff”,它将正确返回 *2f*,但如果我添加任何其他内容,它只会再次覆盖它。
例如,如果我输入“abcdefg”,我会得到“g”而不是“abcdefg”。
“输入”是一个 JTextField。
String inputs = input.getText();
String result = new String();
int counter = 1;
for(int i = 0; i < inputs.length(); i++){
if(inputs.charAt(i) == '*')result += "**";
else if(i < inputs.length()-1){
if(inputs.charAt(i) != inputs.charAt(i+1) && counter == 0){
result = result + inputs.charAt(i);
}
else if(counter != 1 && inputs.charAt(i) != inputs.charAt(i+1)){
result = (String)(result + "*" + counter + inputs.charAt(i) + "*");
}
else if(inputs.charAt(i) == inputs.charAt(i+1)){
counter++;
}
}
else if(counter != 1){
result = (String)( result + "*" + counter + inputs.charAt(i) + "*");
counter = 1;
}
else result = result + inputs.charAt(i);
//编辑它现在正在工作。我修复了'counter == 0',但这并没有什么区别,因为我在最后添加了字符。 我更改的另一件事是在每个语句之后添加一个“继续”。
for(int i = 0; i < inputs.length(); i++){
if(i < inputs.length()-1){
if(counter != 1 && inputs.charAt(i) != inputs.charAt(i+1)){
result = (String)(result + "*" + counter + inputs.charAt(i) + "*");
counter = 1;
continue;
}
else if(inputs.charAt(i) == inputs.charAt(i+1)){
counter++;
continue;
}
}
else if(counter != 1){
result = (String)(result + "*" + counter + inputs.charAt(i) + "*");
counter = 1;
continue;
}
if(inputs.charAt(i) == '*'){
result += "**";
continue;
}
else{result = result + inputs.charAt(i);}
}
【问题讨论】:
-
首先,如果您正在构建字符串,我建议使用 StringBuilder 而不是 String。
-
不需要继续,因为它会在到达结束括号时自动循环。你也没有改变
int counter = 1;