如何附加/前置存储在arraylist中的文本

时间:2015-03-13 03:21:05

标签: java string arraylist

我正在尝试编写一个Java程序,它将html代码附加到文本中。我们的想法是创建一个文本文件,其中包含一些由&&分隔的内容,并使用相应的html标记添加/添加文本。具体来说,我试图自动化html生成的bootstrap列。我向用户询问一个文件,然后将其读入一个arraylist。如果程序正常工作,数组列表中的每个点应包含分隔符&&之间的文本。如何编写edit method,将数组列表作为参数并添加相应的标记并返回我可以传递给write方法的新数组列表吗?

**编辑:我应该提到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();
      }
}

3 个答案:

答案 0 :(得分:2)

您可以确保append和prepend方法还使用addAll方法返回ArrayLists和组合所有3个ArrayLists(在editFile()方法内),例如: http://beginnersbook.com/2013/12/how-to-joincombine-two-arraylists-in-java/

我猜这是你想要的:

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;

    }

答案 1 :(得分: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();

希望这有用。

你可以写&#39; getPrependText()&#39;获取startTag的方法

String startTag = getPrependTex();

和getPrependText();将返回所需的标签以进行前置。

答案 2 :(得分: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");
}

如果需要换行,请在每个字符串的末尾插入'\ n'。 最后,newList - 你猜对了 - 你的新名单。