我想编写一个简短的程序,它取代了字符串的计数。所以我想用0的insted开始字符串。因为它是一个很长的字符串我不想用我自己的改变它。 所以String(在这个例子中)是:String LINE:
我希望String以0开始计数。
public static void main(String[] args) {
int Counter = 1;
while (Counter <=300){
int counter2 =1;
String Counterstring ;
Counterstring = (new Integer(counter2)).toString() + ".";
int ReplaceCounting = 0;
String Replace = (new Integer(ReplaceCounting)).toString() + ".";
Line.replace(Counterstring , Replace);
Counter++;
}
System.out.println(Line);
}
}
有人可以告诉我我做错了什么吗? 输出是一样的。
编辑:
我将其改为: 我把它改成了:
public static void main(String[] args) {
for (int counter = 1; counter <= 300; counter++) {
int NormCounter =1;
int ReplaceCounter = 0;
String NormCounterS = (new Integer(NormCounter)).toString() + ".";
String ReplaceCounterS = (new Integer(ReplaceCounter)).toString() + ".";
Line = Line.replace(NormCounterS , ReplaceCounterS);
++ReplaceCounter;
++NormCounter;
}
System.out.println(Line);
}
}
但它仍会改变第一个&#34; 1。&#34;进入&#34; 0。&#34; ...所以它的0,2,3,4 ...但我希望计数到0,1,2,3,4
答案 0 :(得分:5)
你假设字符串是可变的。他们不是。调用replace
然后忽略返回值将没有任何用处。你想要:
Line = Line.replace(Counterstring, Replace);
虽然对于首选项,您应该使用camelCase
作为变量名称,并且避免无缘无故地进行大量工作。例如,你的循环会更好:
for (int counter = 1; counter <= 300; counter++) {
line = line.replace("1.", "0.");
}
目前尚不清楚为什么你想要多次这样做,当然......我的描述对我来说非常模糊,我很害怕。
编辑:使用您编辑的代码,看起来您真的想要:
for (int counter = 1; counter <= 300; counter++) {
line = line.replace(counter + ".", (counter - 1) + ".");
}
答案 1 :(得分:2)
首先,就像Jon说的那样,对你的变量没有适当的camelCase
会使你的代码对普通的Java用户几乎不可读。您发布的任何新代码都应该使用已建立的约定。
现在,对于您的代码,每次循环遍历时都会重置计数器。因此,每当您到line.replace(normCounter, replaceCounter)
时,它都会line.replace("1.", "0.")
这是你应该做的:
int replaceCounter = 0;
for (int counter = 1; counter <= 300; counter++) {
line = line.replace(String.valueOf(counter) + ".", String.valueOf(replaceCounter) + ".");
replaceCounter++;
}
System.out.println(line);
注意我是如何在for-loop之外初始化我的计数器的。