2012-05-24 2 views
3

Я пытаюсь заменить некоторую строку в StringBuilder с использованием метода replace, но, к сожалению, он работает как метод insert.Метод замены StringBuilder как метод вставки

Вот код:

public class StringBuilderReplace { 

    public static void main(String[] args) { 
     StringBuilder builder = new StringBuilder(); 

     builder.append("Line 1\n"); 
     builder.append("Line 2\n"); 
     builder.append("Line 3\n"); 

     builder.replace(builder.indexOf("Line 2"), builder.indexOf("Line 2"), "Temporary Line\n"); 

     System.out.println(builder.toString()); 
    } 
} 

Результат для этого кода:

Line 1 
Temporary Line 
Line 2 
Line 3 

Что я хочу:

Line 1 
Temporary Line 
Line 3 

Как это сделать, чтобы получить результат я хочу?

Обновление на основе AljoshaBre ответить

Это работает, если изменить код, как этот:

builder.replace(builder.indexOf("Line 2"), builder.indexOf("Line 3"), "Temporary Line\n"); 

Но новая проблема происходит, что, если следующая строка (для этого примера Line 3) I не знаете содержание?

ответ

7

Это потому, что вы получаете индекс «Line 2» в качестве начального индекса, который является началом этой строки, и вы делаете то же самое для последнего индекса.

Я думаю, что вы должны сделать следующее:

public class StringBuilderReplace { 
     public static void main(String[] args) { 
      StringBuilder builder = new StringBuilder(); 

      builder.append("Line 1\n"); 
      builder.append("Line 2\n"); 
      builder.append("Line 3\n"); 

      String lineToReplace = "Line 1\n"; 
      int startIndex = builder.indexOf(lineToReplace); 
      int lastIndex = startIndex + lineToReplace.length(); 

      builder.replace(startIndex, lastIndex, "Temporary Line\n"); 
      System.out.println(builder.toString()); 
     } 
} 
+0

Он работает, но как, если я не знаю, если следующая строка 'Line 3'? – Crazenezz

+0

builder.replace (builder.indexOf («Строка 2»), builder.indexOf («Строка 2») + «Строка 2 \ n» .length(), «Временная линия \ n»); – revo

+0

Получите длину строки, которую вы хотите заменить, и добавьте это значение в значение, возвращаемое 'builder.indexOf (« Строка 2 »)' (в этом примере). Это будет ваш последний индекс. – nullpotent

2
final String toReplace = "Line 2\n"; 
final int start = builder.indexOf(toReplace); 
builder.replace(start, start+toReplace.length(), "Temporary Line\n"); 
+0

Благодарим вас за пример :-) – Crazenezz

Смежные вопросы