2013-09-19 4 views
0

У меня есть файл, который читает мой сканер, а затем в новом файле мой автор копирует какую-то его часть и заменяет строки, которые я хочу редактировать.Замена некоторых строк в файле

У меня проблема в некоторых конкретных строках, к которым я хочу добавить некоторые элементы из stringarray [Ddd,Eee,...].

Моя проблема заключается в том, что я не могу заставить сканер и файл-конструктор идентифицировать точное положение, в котором я хочу передать элементы. Они должны быть ниже "downstream_rm", между/и /, а также они должны заменить старый текст.

Пример/Target:

старый файл строки:

.... 
    downstream_rm(j,l) ... 
       /Aaa.(bbb) 
        Bbb.(ccc)/
    .... 

Новые строки файла:

... 
    downstream_rm(j,l(.... 
     /str1 
      str2 
       .../

Это код, который я пытался, но не получил желаемых результатов потому что это также сохраняет старый текст:

public static void main(String[] args) { 

File file = new File(); 
File filenew = new File(); 

     try { 


        PrintWriter out = new PrintWriter(new FileWriter(filenew, true)); 
        Scanner scanner = new Scanner(file); 




          while (scanner.hasNextLine()) { 
           String line = scanner.nextLine(); 


     if(line.contains("downstream_rm(j,l)")) { 

              scanner.nextLine(); // so that the line with "downstream" wont be deleted 

              String raw = "" ; 


              for (int index = 0; index < strarray.size(); index++) { 

                String s = strarray.get(index); 
                raw = raw + "\n" + s; 
               } 

             line = "/"+raw+"/" ; } 
      out.write(line); 
     out.write("\n"); 

         } 
         out.flush(); 
         out.close(); 
         scanner.close(); 


      } catch (IOException e) { 
       e.printStackTrace(); 


      } 
      } 
    } 

попытался также, но оно не печатать ничего нового:

 if(line.contains("downstream_rm(j,l)")){ 

           scanner.nextLine(); 

           String raw = "" ; 


           for (int index = 0; index < strarray.size(); index++) { 

             String s = strarray.get(index); 
             raw = raw + "\n" + s; 
            } 

         String raw2 = raw.replaceAll(",", ""); 

           line = line.replaceAll("/.*?/", "/"+raw2+"/"); 
           } 
    out.write(line); 
out.write("\n"); 
+4

Пожалуйста, отформатируйте свой код. –

+0

Вы не показываете, где вы пишете новый файл. – Dodd10x

+0

Что вы имеете в виду? @ Dodd10x – user2598911

ответ

2

ваш код не делает то, что он должен, потому что в соответствии

line = line.replaceAll("/.*?/", "/"+raw2+"/"); 

строка из «линии» эталонным не соответствует регулярному выражению, поэтому он не заменяет

вот что ваша потребность

if (line.contains("downstream_rm(j,l)")) { 
      String replacement = line; 
      while (!replacement.matches(".*?/.*?/.*?")) { 
       replacement += scanner.nextLine(); 
      } 
      String raw = ""; 
      for (int index = 0; index < strarray.size(); index++) { 

       String s = strarray.get(index); 
       raw = raw + "\n" + s; 
      } 
      String raw2 = raw.replaceAll(",", ""); 
      line = replacement.replaceAll("/.*?/", "/" + raw2 + "/"); 
     } 

J ust убедитесь, что ваша переменная «raw2» указывает на правый объект String, а в строке результата будет заменена строка

+0

Исключение из потока «main» java.util.NoSuchElementException: не найдено ни одной строки \t at java.util.Scanner.nextLine (Неизвестный источник) Его строка: замена + = scanner.nextLine(); @Eugen Halca – user2598911

+0

обновлен, это значит, что ваш файл не соответствует точно указанному примеру ... –

+0

Теперь все в порядке. Только одна маленькая деталь. Первый/печатается в одной строке с содержимым. Мне нужно это к строке ниже рядом с строками, как пример. Требуется изменение в регулярном выражении? @Eugen Halca – user2598911

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