我正在尝试编写一个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();
}
}
答案 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
- 你猜对了 - 你的新名单。