提问者:小点点

替换Java中的字符串


我想编写一个简短的程序,替换字符串的计数。所以我想以0 insted of 1开始字符串。因为它是一个长字符串,我不想自己改变它。所以字符串(在本例中)是:字符串行:

  1. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore
  2. magna aliquyam erat, sed diam voluptua.
  3. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum
  4. dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore
  5. magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
  6. no sea takimata sanctus est Lorem ipsum dolor sit amet.

我希望字符串以0开始计数。并继续使用1.2.3……(0,1,2,3,4…)

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);
}

它只是把第一个“1”变成了“0”…所以是0,2,3,4…但是我希望计数是0,1,2,3,4


共3个答案

匿名用户

即使您增加计数器,您也会在每次循环迭代时将计数器重新设置为1和0。您可能应该移动这段代码:

int NormCounter = 1;
int ReplaceCounter = 0;

到for循环之外:

public static void main(String[] args) {

    int NormCounter = 1;
    int ReplaceCounter = 0;

    for (int counter = 1; counter <= 300; counter++) {
        String NormCounterS  = NormCounter + ".";
        String ReplaceCounterS = ReplaceCounter + ".";

        Line = Line.replace(NormCounterS, ReplaceCounterS);

        ++ReplaceCounter;
        ++NormCounter;
    }

    System.out.println(Line);
}

另请注意String NormCounterS=(new Integer(NormCounter)). toString() ".";可以更简单地重写String NormCounterS=NormCounterS ".";。(最终结果是相同的)。

有关此方法的附加bug修复,请参阅Laky的注释。

Java编码约定的一个小插件:用小写起始字母命名Java变量是标准的。例如,使用NormCounter而不是NormCounter

匿名用户

正如其他人建议的那样,将变量赋值放在for循环之外。但是,您的代码仍然无法工作,您将在第一次迭代中匹配“31.”并将其更改为“30.”,然后在以后的迭代中,您将匹配“30.”并将其更改为“29.”,因此您实际上将“31.”更改为“29.”,而不是您想要的“30.”。尝试以下操作:(我假设数字前面有一个空格)

for (int counter = 0; counter < 300; counter++) {
    line = line.replace(" " + (counter + 1) + ".", " " + counter + ".");
}

编辑:可能更好的解决方案是使用replace First,这次不需要假设:

for (int counter = 0; counter < 300; counter++) {
    line = line.replaceFirst((counter + 1) + ".", counter + ".");
}

现在应该可以了。

注意:通常以小写字母开头变量名,并使用以大写开头的名称作为类名。

匿名用户

放置int NormCounter=1; int Replace eCounter=0;在for循环之外