java源文件解析

提供一个已有的工具类,里面有些封装好的方法,主要是IO流进行读取文件,写入文件,关闭流等。另一个类继承该工具类,在子类中编写代码,提供main方法,操作另一个包下的一个.... 提供一个已有的工具类,里面有些封装好的方法,主要是IO流进行读取文件,写入文件,关闭流等。另一个类继承该工具类,在子类中编写代码,提供main方法,操作另一个包下的一个.java的类。要求读取进入IO流,然后经过处理输出到本地文件夹中,处理过的类仅保留类定义方法定义和注释。对要操作的类进行稍加修改,不影响程序的运行结果。这道题研究很久,是不是要用到正则表达式呢?求大神给个思路。
先读取一个java类文件,读取文件后把类中的除了类定义、方法定义、注释之外的东西去掉,剩下的输出到另一个文件夹中的同名类中。处理后的类,要保证能正确编译。
展开
 我来答
帅帅一炮灰
推荐于2016-06-26 · 知道合伙人教育行家
帅帅一炮灰
知道合伙人教育行家
采纳数:6860 获赞数:60158

向TA提问 私信TA
展开全部
建一个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;
}
winDevelop
推荐于2016-06-23 · TA获得超过112个赞
知道答主
回答量:72
采纳率:0%
帮助的人:35.7万
展开全部

大概、应该就是 。。。

  1. 一行一行的读,全部读完。

  2. 将这一行中除了""双引号之内的 // 和它之后的字符 以及  /**/之内的字符  替换掉,替换为空白。使用正则,注意多行注释的匹配

  3. 如果有其他情况再列举。

    

这个问题的代码应该不难,主要就是各种注释的情况的 穷举。

追问
/**
*
**/
这种注释我感觉匹配开头的几个就行了吧
追答
这种注释叫文档说明注释,可以用来注释 类、变量、方法;
这些都可以,怎么是只在类开头呢
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乌微月2S
2014-02-21 · TA获得超过5037个赞
知道大有可为答主
回答量:5361
采纳率:42%
帮助的人:2886万
展开全部
我觉得你的问题没有说明白啊 。
追问
先读取一个java类文件,读取文件后把类中的除了类定义、方法定义、注释之外的东西去掉,剩下的输出到另一个文件夹中的同名类中。处理后的类,要保证能正确编译。
追答
那就写呗,是要用正则,提取出来,放到一个文件中,
剩下的输出到另一个文件夹中的同名类中。处理后的类,要保证能正确编译。

这个怎么理解?就是没有类的定义什么的也要正确编译?不可能吧。
是不是要抽出个接口出来啊。看样子像,应该不难,你动手做吧,遇到什么问题就解决什么问题好了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式