Java - 搜索和替换字符串的一部分

时间:2012-04-06 23:03:34

标签: java

我想编写一个简短的程序,它取代了字符串的计数。所以我想用0的insted开始字符串。因为它是一个很长的字符串我不想用我自己的改变它。 所以String(在这个例子中)是:String LINE:

  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. 在vero eos et accusam et justo duo dolores et ea rebum。 Stet clita kasd gubergren,no sea takimata sanctus est Lorem ipsum
  4. dolor坐下来。 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。在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。
  7. 我希望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

2 个答案:

答案 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之外初始化我的计数器的。