提问者:小点点

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开始计数。

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

}

}

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


共2个答案

匿名用户

你假设字符串是可变的。他们不是。调用替换然后忽略返回值将没有任何用处。你想要:

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) + ".");
}

匿名用户

首先,正如Jon所说,变量没有适当的camelCase会使普通Java用户几乎无法阅读您的代码。您发布的任何新代码都应该真正使用已建立的约定。

现在,至于你的代码,你每次迭代循环时都要重置计数器。所以每次你到达line.替换(NormCounter, replace eCounter)它都在做line.替换("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循环之外初始化计数器的。