如何将子字符串从 .docx 存储到 java bean class?
How to store substrings from .docx to java bean class?
我需要根据从 .docx 文件读取的字符串创建 java bean class。 docx 文件如下所示:
Comments:
20.6.2018 16:18-16:25 problem: first problem, action first action
20.6.2018 16:20-16:45 problem: second problem, action: second action
20.6.2018 16:25-16:30 problem: third problem, action: third action
Check list based on data from 24.6.2018.
我创建了一个 CheckList Class 来读取我使用 FAData.class POJO 实例根据 How to parse a csv file and store datails in java bean class
设置其即时变量的 docx
public class CheckList {
String Check;
ArrayList<String> ActionG = new ArrayList<String>();
ArrayList<String> ProblemG = new ArrayList<String>();
ArrayList<String> DateG = new ArrayList<String>();
ArrayList<String> BeginTimeG = new ArrayList<String>();
ArrayList<String> EndTimeG = new ArrayList<String>();
public void readDocxFile(String fileName) {
FAData data = new FAData(); // instance of FAData POJO
try {
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file.getAbsolutePath());
XWPFDocument document = new XWPFDocument(fis);
List<XWPFParagraph> paragraphs = document.getParagraphs();
String Comments = "";
for (XWPFParagraph para : paragraphs) {
Comments = Comments.concat(para.getText() + "\n");
}
Check = Comments.substring(Comments.lastIndexOf("Check"), Comments.length()); // split the last sentence
String CommentsG = Comments.substring(Comments.indexOf(":") + 1, Comments.lastIndexOf("Check")); // split the sentences between „Comments:” and the last sentence
data.setCheck(Check); // add the Check instant variable to FAData POJO
if (!CommentsG.equals("")) { // check if sentences exist between „Comments:” and the last sentence
// add the substrings to ArrayLists
String[] FAG = CommentsG.split("\n");
for (int i = 1; i < FAG.length; i++) {
ActionG.add(FAG[i].substring(FAG[i].indexOf("action") + 7, FAG[i].length()));
ProblemG.add(FAG[i].substring(FAG[i].indexOf("problem") + 9, FAG[i].indexOf("action") - 2));
DateG.add(FAG[i].substring(0, 10));
BeginTimeG.add(FAG[i].substring(FAG[i].indexOf(":") - 2, FAG[i].indexOf("-")));
EndTimeG.add(FAG[i].substring(FAG[i].indexOf("-") + 1, FAG[i].indexOf("-") + 6));
}
}
// add the ArrayList instant variables to FAData POJO
data.setActionG(ActionG);
data.setProblemG(ProblemG);
data.setDateG(DateG);
data.setBeginTimeG(BeginTimeG);
data.setEndTimeG(EndTimeG);
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class FAData {
String Check;
ArrayList<String> ActionG = new ArrayList<String>();
ArrayList<String> ProblemG = new ArrayList<String>();
ArrayList<String> DateG = new ArrayList<String>();
ArrayList<String> BeginTimeG = new ArrayList<String>();
ArrayList<String> EndTimeG = new ArrayList<String>();
public String getCheck() {
return Check;
}
public void setCheck(String Check) {
this.Check = Check;
}
public ArrayList<String> getActionG() {
return ActionG;
}
public void setActionG(ArrayList<String> ActionG) {
this.ActionG = ActionG;
}
....
//Getter and Setter for the rest variables
}
我测试了变量是否可以从 FAData.class:
public class test {
public static void main(String[] args) {
CheckList TC = new CheckList();
String fileName = "c:\path\to\docx";
try {
TC.readDocxFile(fileName);
FAData datas = new FAData();
String testCheck = datas.getCheck();
ArrayList<String> testDate = datas.getDateG();
System.out.println(testCheck);
System.out.println(testDate);
} catch (Exception e) {
System.out.println(e);
}
}
}
但我得到了空值。我不知道我做错了什么或者我应该怎么做 FAData.class。有人可以给我建议吗?
与此同时,我找到了解决方案。我在 readDocxFile
方法中添加了 List<FAData> datas = new ArrayList<FAData>();
并向其添加了 data
值:
datas.add(data);
如果我在另一个 class 中创建一个新的 CheckList 对象实例,我可以获得数据,例如:
CheckList TC = new CheckList();
List<FAData> D = TC.readDocxFile(fileName);
String DateG = D.get(0).getDateG(0);
我需要根据从 .docx 文件读取的字符串创建 java bean class。 docx 文件如下所示:
Comments:
20.6.2018 16:18-16:25 problem: first problem, action first action
20.6.2018 16:20-16:45 problem: second problem, action: second action
20.6.2018 16:25-16:30 problem: third problem, action: third action
Check list based on data from 24.6.2018.
我创建了一个 CheckList Class 来读取我使用 FAData.class POJO 实例根据 How to parse a csv file and store datails in java bean class
设置其即时变量的 docxpublic class CheckList {
String Check;
ArrayList<String> ActionG = new ArrayList<String>();
ArrayList<String> ProblemG = new ArrayList<String>();
ArrayList<String> DateG = new ArrayList<String>();
ArrayList<String> BeginTimeG = new ArrayList<String>();
ArrayList<String> EndTimeG = new ArrayList<String>();
public void readDocxFile(String fileName) {
FAData data = new FAData(); // instance of FAData POJO
try {
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file.getAbsolutePath());
XWPFDocument document = new XWPFDocument(fis);
List<XWPFParagraph> paragraphs = document.getParagraphs();
String Comments = "";
for (XWPFParagraph para : paragraphs) {
Comments = Comments.concat(para.getText() + "\n");
}
Check = Comments.substring(Comments.lastIndexOf("Check"), Comments.length()); // split the last sentence
String CommentsG = Comments.substring(Comments.indexOf(":") + 1, Comments.lastIndexOf("Check")); // split the sentences between „Comments:” and the last sentence
data.setCheck(Check); // add the Check instant variable to FAData POJO
if (!CommentsG.equals("")) { // check if sentences exist between „Comments:” and the last sentence
// add the substrings to ArrayLists
String[] FAG = CommentsG.split("\n");
for (int i = 1; i < FAG.length; i++) {
ActionG.add(FAG[i].substring(FAG[i].indexOf("action") + 7, FAG[i].length()));
ProblemG.add(FAG[i].substring(FAG[i].indexOf("problem") + 9, FAG[i].indexOf("action") - 2));
DateG.add(FAG[i].substring(0, 10));
BeginTimeG.add(FAG[i].substring(FAG[i].indexOf(":") - 2, FAG[i].indexOf("-")));
EndTimeG.add(FAG[i].substring(FAG[i].indexOf("-") + 1, FAG[i].indexOf("-") + 6));
}
}
// add the ArrayList instant variables to FAData POJO
data.setActionG(ActionG);
data.setProblemG(ProblemG);
data.setDateG(DateG);
data.setBeginTimeG(BeginTimeG);
data.setEndTimeG(EndTimeG);
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class FAData {
String Check;
ArrayList<String> ActionG = new ArrayList<String>();
ArrayList<String> ProblemG = new ArrayList<String>();
ArrayList<String> DateG = new ArrayList<String>();
ArrayList<String> BeginTimeG = new ArrayList<String>();
ArrayList<String> EndTimeG = new ArrayList<String>();
public String getCheck() {
return Check;
}
public void setCheck(String Check) {
this.Check = Check;
}
public ArrayList<String> getActionG() {
return ActionG;
}
public void setActionG(ArrayList<String> ActionG) {
this.ActionG = ActionG;
}
....
//Getter and Setter for the rest variables
}
我测试了变量是否可以从 FAData.class:
public class test {
public static void main(String[] args) {
CheckList TC = new CheckList();
String fileName = "c:\path\to\docx";
try {
TC.readDocxFile(fileName);
FAData datas = new FAData();
String testCheck = datas.getCheck();
ArrayList<String> testDate = datas.getDateG();
System.out.println(testCheck);
System.out.println(testDate);
} catch (Exception e) {
System.out.println(e);
}
}
}
但我得到了空值。我不知道我做错了什么或者我应该怎么做 FAData.class。有人可以给我建议吗?
与此同时,我找到了解决方案。我在 readDocxFile
方法中添加了 List<FAData> datas = new ArrayList<FAData>();
并向其添加了 data
值:
datas.add(data);
如果我在另一个 class 中创建一个新的 CheckList 对象实例,我可以获得数据,例如:
CheckList TC = new CheckList();
List<FAData> D = TC.readDocxFile(fileName);
String DateG = D.get(0).getDateG(0);