java源文件解析
提供一个已有的工具类,里面有些封装好的方法,主要是IO流进行读取文件,写入文件,关闭流等。另一个类继承该工具类,在子类中编写代码,提供main方法,操作另一个包下的一个....
提供一个已有的工具类,里面有些封装好的方法,主要是IO流进行读取文件,写入文件,关闭流等。另一个类继承该工具类,在子类中编写代码,提供main方法,操作另一个包下的一个.java的类。要求读取进入IO流,然后经过处理输出到本地文件夹中,处理过的类仅保留类定义方法定义和注释。对要操作的类进行稍加修改,不影响程序的运行结果。这道题研究很久,是不是要用到正则表达式呢?求大神给个思路。
先读取一个java类文件,读取文件后把类中的除了类定义、方法定义、注释之外的东西去掉,剩下的输出到另一个文件夹中的同名类中。处理后的类,要保证能正确编译。 展开
先读取一个java类文件,读取文件后把类中的除了类定义、方法定义、注释之外的东西去掉,剩下的输出到另一个文件夹中的同名类中。处理后的类,要保证能正确编译。 展开
3个回答
展开全部
建一个Student实体类封装数据
public static List<Student> readXml() {
List<Student> list = new ArrayList<Student>();
//定义一个<a href="https://www.baidu.com/s?wd=dom%E8%A7%A3%E6%9E%90&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3uhnvryDYrjIBPyDYn1Rv0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1RznjcYn1TLnH04rjcYnjTvPf" target="_blank" class="baidu-highlight">dom解析</a>器工厂实例
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
//由工厂实例得到一个<a href="https://www.baidu.com/s?wd=dom%E8%A7%A3%E6%9E%90&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3uhnvryDYrjIBPyDYn1Rv0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1RznjcYn1TLnH04rjcYnjTvPf" target="_blank" class="baidu-highlight">dom解析</a>器
DocumentBuilder dom = factory.newDocumentBuilder();
//找到<a href="https://www.baidu.com/s?wd=xml%E6%96%87%E6%A1%A3&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3uhnvryDYrjIBPyDYn1Rv0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1RznjcYn1TLnH04rjcYnjTvPf" target="_blank" class="baidu-highlight">xml文档</a>
File file=new File("src/com/jereh/ch05/Students.xml");
Document doc=dom.parse(file);
//
Element root = doc.getDocumentElement();
NodeList stuNodeList = root.getChildNodes();
for (int i = 0; i < stuNodeList.getLength(); i++) {
Node stu = stuNodeList.item(i);
Student student = new Student();
if (stu != null && stu.getNodeType() == Node.ELEMENT_NODE) {
// System.out.println(stu);
Element stuElement = (Element) stu;
student.setNo(stuElement.getAttribute("id"));
// stu.getAttributes().getNamedItem(null);
// Element stu=(Element)stuNodeList
NodeList info = stuElement.getChildNodes();
for (int j = 0; j < info.getLength(); j++) {
info.item(j).getNodeName();
Node n = info.item(j);
if ("name".equals(n.getNodeName())) {
// n.getFirstChild().getNodeValue();
student.setName(n.getLastChild().getNodeValue());
} else if ("age".equals(n.getNodeName())) {
student.setAge(Integer.parseInt(n.getFirstChild()
.getNodeValue()));
}
list.add(student);
}
}
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// System.out.println(root.getNodeValue());
return list;
}
public static List<Student> readXml() {
List<Student> list = new ArrayList<Student>();
//定义一个<a href="https://www.baidu.com/s?wd=dom%E8%A7%A3%E6%9E%90&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3uhnvryDYrjIBPyDYn1Rv0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1RznjcYn1TLnH04rjcYnjTvPf" target="_blank" class="baidu-highlight">dom解析</a>器工厂实例
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
//由工厂实例得到一个<a href="https://www.baidu.com/s?wd=dom%E8%A7%A3%E6%9E%90&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3uhnvryDYrjIBPyDYn1Rv0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1RznjcYn1TLnH04rjcYnjTvPf" target="_blank" class="baidu-highlight">dom解析</a>器
DocumentBuilder dom = factory.newDocumentBuilder();
//找到<a href="https://www.baidu.com/s?wd=xml%E6%96%87%E6%A1%A3&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3uhnvryDYrjIBPyDYn1Rv0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1RznjcYn1TLnH04rjcYnjTvPf" target="_blank" class="baidu-highlight">xml文档</a>
File file=new File("src/com/jereh/ch05/Students.xml");
Document doc=dom.parse(file);
//
Element root = doc.getDocumentElement();
NodeList stuNodeList = root.getChildNodes();
for (int i = 0; i < stuNodeList.getLength(); i++) {
Node stu = stuNodeList.item(i);
Student student = new Student();
if (stu != null && stu.getNodeType() == Node.ELEMENT_NODE) {
// System.out.println(stu);
Element stuElement = (Element) stu;
student.setNo(stuElement.getAttribute("id"));
// stu.getAttributes().getNamedItem(null);
// Element stu=(Element)stuNodeList
NodeList info = stuElement.getChildNodes();
for (int j = 0; j < info.getLength(); j++) {
info.item(j).getNodeName();
Node n = info.item(j);
if ("name".equals(n.getNodeName())) {
// n.getFirstChild().getNodeValue();
student.setName(n.getLastChild().getNodeValue());
} else if ("age".equals(n.getNodeName())) {
student.setAge(Integer.parseInt(n.getFirstChild()
.getNodeValue()));
}
list.add(student);
}
}
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// System.out.println(root.getNodeValue());
return list;
}
展开全部
大概、应该就是 。。。
一行一行的读,全部读完。
将这一行中除了""双引号之内的 // 和它之后的字符 以及 /**/之内的字符 替换掉,替换为空白。使用正则,注意多行注释的匹配
如果有其他情况再列举。
这个问题的代码应该不难,主要就是各种注释的情况的 穷举。
追问
/**
*
**/
这种注释我感觉匹配开头的几个就行了吧
追答
这种注释叫文档说明注释,可以用来注释 类、变量、方法;
这些都可以,怎么是只在类开头呢
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得你的问题没有说明白啊 。
追问
先读取一个java类文件,读取文件后把类中的除了类定义、方法定义、注释之外的东西去掉,剩下的输出到另一个文件夹中的同名类中。处理后的类,要保证能正确编译。
追答
那就写呗,是要用正则,提取出来,放到一个文件中,
剩下的输出到另一个文件夹中的同名类中。处理后的类,要保证能正确编译。
这个怎么理解?就是没有类的定义什么的也要正确编译?不可能吧。
是不是要抽出个接口出来啊。看样子像,应该不难,你动手做吧,遇到什么问题就解决什么问题好了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询