2015-03-13 2 views
0

Я пытаюсь написать Java-программу, которая будет добавлять и добавлять html-код в текст. Идея состоит в том, чтобы иметь текстовый файл с некоторым контентом, который разделен на && и добавляет/добавляет текст с соответствующими тегами html. В частности, я пытаюсь автоматизировать генерации столбцов начальной загрузки html. Я спрашиваю у пользователя файл, а затем читаю его в arraylist. Если программа работает правильно, каждое пятно в списке массива должно содержать текст между разделителем &&. Как написать edit method, который примет список массивов в качестве параметра и добавит соответствующие теги и вернет новый список массивов, который я могу пройти к методу записи?Как добавить/добавить текст, хранящийся в arraylist

** Редактирование: Следует упомянуть, что методы append и prepend - это просто метки для того, что я хочу записать в каждую запись с разделителями текста. Открыта для любых предложений о том, как написать метод.

public static ArrayList<String> readLines() throws IOException { 
    ArrayList<String> lines = new ArrayList<>(); 

    JOptionPane.showMessageDialog(null, "Please choose a file"); 
    JFileChooser input = new JFileChooser(); 
    int a = input.showOpenDialog(null); 
    String file = ""; 

    if (a == JFileChooser.APPROVE_OPTION) { 
     File selectedFile = input.getSelectedFile(); 
     file = selectedFile.getPath(); 
    } 

    //use file input to read in line one at a time 
    Scanner read = new Scanner(new File(file)); 
    read.useDelimiter("&&"); 
    while(read.hasNext()){ 
     lines.add(read.next()); 
    } 
    return lines; 
} 

public static void editFile(ArrayList<String> formalLines){ 
    //appendText() --> insert content ---> prependText() --> return arrayList to write to file 
} 

public static void appendText() { 
    System.out.println("<div id=\"page-content-wrapper\">"); 
    System.out.println(" <div class=\"container-fluid\">"); 
    System.out.println(" <div class=\"col-xs-6 col-md-4\">"); 
} 

public static void prependText(){ 
    System.out.println(" </div>"); 
    System.out.println(" </div>"); 
    System.out.println("</div>"); 
} 

public static void writeFile(ArrayList<String> formalFinalArray) throws FileNotFoundException, UnsupportedEncodingException { 
    try { 
     FileOutputStream fos = new FileOutputStream("output"); 
     ObjectOutputStream oos = new ObjectOutputStream(fos); 
     oos.writeObject(formalFinalArray); // write MenuArray to ObjectOutputStream 
     oos.close(); 
    } catch(Exception ex) { 
     ex.printStackTrace(); 
     } 
} 
+0

['ArrayList # add (int, E)'] (http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#add (int,% 20E)) ? – MadProgrammer

+0

не уверен, что я последую за тобой. Я не знаю, как я добавляю текст-прединдер, получаю содержимое, а затем добавляю и помещаю его обратно в новый список массивов. –

+0

О, я бы хотел вставить «html» между элементами – MadProgrammer

ответ

2

Вы можете убедиться, что добавлять и PREPEND методы также возвращают ArrayLists и объединить все 3 ArrayLists (внутри editFile() метод) с использованием метода addAll, например: http://beginnersbook.com/2013/12/how-to-joincombine-two-arraylists-in-java/

Im угадать это то, что вы хочу:

public static void editFile(ArrayList<String> formalLines){ 
     //appendText() --> insert content ---> prependText() --> return arrayList to write to file 
     ArrayList<String> newList = new ArrayList<String>(); 
     try { 
      for(String item:readLines()){ 
       newList.addAll(appendText()); 
       newList.add(item); 
       newList.addAll(prependText()); 
      } 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    public static ArrayList<String> appendText() { 

     ArrayList<String> append = new ArrayList<String>(); 
     append.add("<div id=\"page-content-wrapper\">"); 
     append.add(" <div class=\"container-fluid\">"); 
     append.add(" <div class=\"col-xs-6 col-md-4\">"); 
     return append; 
    } 

    public static ArrayList<String> prependText(){ 
     ArrayList<String> prepend = new ArrayList<String>(); 
     prepend.add(" </div>"); 
     prepend.add(" </div>"); 
     prepend.add("</div>"); 
     return prepend; 

    } 
+0

Я думаю, что для 'someTextA && someTextB',' Список_массивов , 'Список_массивов ' что бы добавить ', someTextASomeTextB, ' вместо ' someTextA , someTextB ' –

+0

Так вы имеете в виду для каждого ArrayList элемента из списка readLines вам нужно иметь теги из append и prepend? – cjcroix

+0

да, это правильно –

1

Использование StringBuilder

StringBuilder lines = new StringBuilder(); 

Добавить исходные теги к нему тогда, когда вы делаете это

lines.add(read.next); 

ли это вместо

String tagStart = "<div>"; 

String tagEnd = "</div>"; 

lines.append(tagStart).append(read.next).append(tagEnd); 

После цикла вы можете добавить закрывающий теги так же, как вы положили для каждой строки в цикле ,

В конце концов, когда вы хотите, чтобы написать это сделать

lines.toString(); 

Надеется, что это полезно.

Вы можете написать 'getPrependText() метод, чтобы получить начальныйТег

String startTag = getPrependTex(); 

и getPrependText(); вернет вам нужные теги для добавления.

1

Это довольно просто. Если я правильно понял, вам нужны строки, которые у вас есть, с вашими строками ArrayList посередине.

Итак, у нас есть строка за строкой ArrayList строк в нашем файле? Это упрощает процесс, так как мы можем получить номер строки по индексу. Поэтому для добавления мы можем начать с вашей последней строки в наборе прединговых строк (потому что мы добавляем к индексу 0 и позволяем им естественным образом перемещаться по списку). Таким образом, мы будем:

void prependText() { 
    lines.add(0, " <div class=\"col-xs-6 col-md-4\">"); 
    lines.add(0, " <div class=\"container-fluid\">"); 
    lines.add(0, "<div id=\"page-content-wrapper\">"); 
} 

void appendText() { 
    lines.add(" </div>"); 
    lines.add(" </div>"); 
    lines.add("</div>"); 
} 

Вместо этого, если вы хотите каждый пункт в lines, чтобы быть зажатым так сказать, то мы будем:

ArrayList<String> newList = new ArrayList<>(); 
for(int i = 0; i < lines.size(); i++) { 
    newList.add("<div id=\"page-content-wrapper\">" + 
    " <div class=\"container-fluid\">" + 
    "<div id=\"page-content-wrapper\">" + 
    lines.get(i) + 
    " </div>" + 
    " </div>" + 
    "</div"); 
} 

Insert «\ п по мере необходимости на концах каждая строка, если вам нужны символы новой строки. И, наконец, newList - вы уже догадались - ваш новый список.