正则表达式+XML+反射+设计模式作业
<p align="center">正则表达式+XML+反射+设计模式作业 一、??? 填空题
二、??? 选择题 ? |
<tr>
<td valign="top" width="53">
<p align="left">8)
</td>
<td colspan="2" valign="top" width="661">
<p align="left">在编写XML 文件时,下列关于属性的声明说法正确的是(? AC? )。(选择两项)
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="50">
<p align="left">?
</td>
<td valign="top" width="611">
<p align="left">?
</td>
</tr>
<tr>
<td valign="top" width="53">
<p align="left">?
</td>
<td valign="top" width="50">
<p align="left">A
</td>
<td valign="top" width="611">
标记中可以使用多个属性
B. C. 属性是不区分大小写的 D. 属性值必须用引号引上 三、??? 判断题- Java反射技术中,对于一个private修饰的成员变量,可以再设置setAccessible(true)后进行暴力访问。( T?? )
- 在Java中,只要给定类的名字,那么就可以通过?Java反射技术来获得类的所有信息,进而创建对象和执行方法。(? F? )
- Java反射机制是指:Java程序可以加载一个运行时才得知名称的类,获悉其完整结构信息(但不包括methods定义),并生成其对象实体、或对其fields设值、或调用其methods。(? T? )
- XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。基本的解析方式有两种,一种叫SAX,另一种叫DOM。SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。( F?? )
- 在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称为DOM树)。(? T? )
- 在XML文档中引用DTD的关键字是ENTITY。( F?? )(ELEMENT)
四、??? 简答题
- XML的主要特点有哪些?
答:XML的特点主要表现在以下几个方面。
1)?? 良好的可读性
2)?? 方便的可扩展性
3)?? 数据内容与其形式的分离
4)?? 便于信息的检索
5)?? 可以轻松地跨平台应用
6)?? 支持不同文字不同语种间的信息交互
7)?? 大大改善网页的超链接性能
8)?? 能够实现数据粒状地更新
- 简述XML的相关技术?
答:XML的相关技术主要包括:DTD与XML Schema技术、CSS和XSL样式技术、DOM技术、XLink和XPath链接技术等。
- 简述XML技术的主要应用?
答:DTD与XML Schema技术用于规范和验证XML文档的,CSS和XSL样式表技术用于格式化显示XML文档的,DOM技术用于把XML文档作为数据对象进行显示和编程处理的,XLink和XPath链接技术在XML文档中使用。
- 什么是XML?为什么要用XML?
答:可扩展标记语言(XML)是用来描述一种称为XML的文件的数据对象,同时也部分描述了处理这些数据对象的计算机程序的行为。XML实质上是一种电子文档信息的自定义语言。任何人、任何行业都可遵循这些规则,自己定义各种标记来描述信息中的所有数据元素,然后通过一种被称为解析器的小程序进行处理。
SGML功能强大,但过于复杂:HTML功能简单,但无法处理大量的结构化信息。XML语言既具有SGML的强大功能和可扩展性,同时又具有HTML的简单性和易用性,能够满足万维网的规则----简单性
XML信息组织与描述方式的分离,不仅改变了HTML的固定标记集,并从根本上改变了传统网页的信息组织方式,设计了一种让所有计算机系统都能够进行“智能”交流的语言。使用得基于信息传输的互联网在信息获取、检索和交换方面发生了巨大改变,为互联网的智能化奠定了基础。XML可轻松地跨平台,充当不同格式数据进行交换的桥梁。
- 什么是(Reflection)反射?其它语言有这种特点吗?
答:Java中的反射是一种强大的工具,它能够创建灵活的代码,这些代码可以在运行时装配,无须在组件之间进行链接。反射允许在编写与执行时,使用程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这种反射成为构建灵活应用的主要工具。需注意的是,如果使用不当,反射的成本会很高。
Java中的类反射Reflection是Java程序开发语言的特片之一,它允许运行中的Java程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。Java的这一能力在实际应用中也许用得不是很多,但是在其它的语言中根本就不存在这一特性。例如,Pascal、C或者C++中就没有办法在程序中获得与函数定义相关的信息。
- 6.?? 实现Java反射技术的主要类有哪些?其作用分别是什么?
在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中
1)?? Class类:代表一个类
2)?? Field 类:代表类的成员变量(属性)
3)?? Method类:代表类的成员方法
4)?? Constructor 类:代表类的构造方法
5)?? Array类:提供了动态创建数组,以及访问数组的元素的静态方法
?
<span style="color: #0000ff">import
<span style="color: #000000"> java.util.Scanner; <span style="color: #0000ff">public <span style="color: #0000ff">class<span style="color: #000000"> Find_1 {<span style="color: #0000ff">public <span style="color: #0000ff">static <span style="color: #0000ff">void<span style="color: #000000"> main(String[] args) {
Scanner sc = <span style="color: #0000ff">new<span style="color: #000000"> Scanner(System.in);
System.out.println("输入一行字符:"<span style="color: #000000">);
String str =<span style="color: #000000"> sc.nextLine();
String regex1 </span>= "[u4e00-u9fa5]";<span style="color: #008000">//</span><span style="color: #008000">检测汉字的正则</span>
<span style="color: #0000ff">int</span> count1 = 0;<span style="color: #008000">//</span><span style="color: #008000">汉字计数器</span>
String regex2 = "[a-z_A-Z]";<span style="color: #008000">//</span><span style="color: #008000">检测字母的正则</span>
<span style="color: #0000ff">int</span> count2 =0;<span style="color: #008000">//</span><span style="color: #008000">字母计数器</span>
String regex3 = "[0-9]";<span style="color: #008000">//</span><span style="color: #008000">检测数字的正则</span>
<span style="color: #0000ff">int</span> count3=0;<span style="color: #008000">//</span><span style="color: #008000">数字计数器</span>
<span style="color: #0000ff">int</span> count4=0;<span style="color: #008000">//</span><span style="color: #008000">空格计数器
</span><span style="color: #008000">//</span><span style="color: #008000">将str中的每个字符进行匹配所以将每个char都存入String数组中</span>
<span style="color: #0000ff">char</span>[] ch =<span style="color: #000000"> str.toCharArray();
String[] arr </span>= <span style="color: #0000ff">new</span><span style="color: #000000"> String[ch.length];
</span><span style="color: #0000ff">for</span>(<span style="color: #0000ff">int</span> i=0;i<ch.length;i++<span style="color: #000000">){
arr[i]</span>=String.valueOf(ch[i]);<span style="color: #008000">//</span><span style="color: #008000">将字符数组的数据保存到字符串数组</span>
<span style="color: #0000ff">if</span><span style="color: #000000">(arr[i].matches(regex1)){
count1</span>++;<span style="color: #008000">//</span><span style="color: #008000">检测字母的正则</span>
<span style="color: #000000"> }
<span style="color: #0000ff">if<span style="color: #000000">(arr[i].matches(regex2)){
count2++;<span style="color: #008000">//<span style="color: #008000">检测数字的正则
<span style="color: #000000"> }
<span style="color: #0000ff">if<span style="color: #000000">(arr[i].matches(regex3)){
count3++;<span style="color: #008000">//<span style="color: #008000">数字计数器
<span style="color: #000000"> }
<span style="color: #0000ff">if(arr[i].matches(" "<span style="color: #000000">)){
count4++;<span style="color: #008000">//<span style="color: #008000">空格计数器
<span style="color: #000000"> }
}
System.out.println("输入信息是:"+<span style="color: #000000">str);
System.out.println("该信息中的汉字有:"+count1+"个"<span style="color: #000000">);
System.out.println("该信息中的字母有:"+count2+"个"<span style="color: #000000">);
System.out.println("该信息中的数字有:"+count3+"个"<span style="color: #000000">);
System.out.println("该信息中的空格有:"+count4+"个"<span style="color: #000000">);
}
}
2<span style="color: #000000">. 使用反射机制完成学生对象的创建并输出学生信息。(7分)
要求:
(1) 定义一个学生类Student,其中包含姓名(String)、年龄(<span style="color: #0000ff">int)、成绩(<span style="color: #0000ff">float<span style="color: #000000">)的属性。
(2<span style="color: #000000">) 编写带参与无参构造方法。
(3<span style="color: #000000">) 重写父类的toString()方法用于输出学生的信息。
(4) 编写测试类TestStudent,从键盘录入学生的信息格式为(姓名:年龄:成绩)一次性录入使用“:”分隔,举例(mary:20:90<span style="color: #000000">)。
(5<span style="color: #000000">) 使用String类的split方法按照“:”进行分隔。
(6<span style="color: #000000">) 调用Constructor的newInstance()方法并用分隔后的信息初始化学生对象。
(7<span style="color: #000000">) 调用重写父类的toString()方法将学生信息进入输出显示。
<span style="color: #0000ff">public <span style="color: #0000ff">class<span style="color: #000000"> student_2 {
<span style="color: #0000ff">public<span style="color: #000000"> String name;
<span style="color: #0000ff">public <span style="color: #0000ff">int<span style="color: #000000"> age;
<span style="color: #0000ff">public <span style="color: #0000ff">float<span style="color: #000000"> grade;
</span><span style="color: #0000ff">public</span><span style="color: #000000"> student_2() {
}
</span><span style="color: #0000ff">public</span> student_2(String name,<span style="color: #0000ff">int</span> age,<span style="color: #0000ff">float</span><span style="color: #000000"> grade) {
</span><span style="color: #0000ff">this</span>.name =<span style="color: #000000"> name;
</span><span style="color: #0000ff">this</span>.age =<span style="color: #000000"> age;
</span><span style="color: #0000ff">this</span>.grade =<span style="color: #000000"> grade;
}
@Override
</span><span style="color: #0000ff">public</span><span style="color: #000000"> String toString() {
</span><span style="color: #0000ff">return</span> "student_2 [姓名=" + name + ",年龄=" + age + ",成绩=" + grade + "]"<span style="color: #000000">;
}
}
<span style="color: #0000ff">import<span style="color: #000000"> java.lang.reflect.Constructor;
<span style="color: #0000ff">import<span style="color: #000000"> java.lang.reflect.Method;
<span style="color: #0000ff">import<span style="color: #000000"> java.util.Scanner;
<span style="color: #0000ff">public <span style="color: #0000ff">class<span style="color: #000000"> TestStudent_2 {
<span style="color: #0000ff">public <span style="color: #0000ff">static <span style="color: #0000ff">void main(String[] args) <span style="color: #0000ff">throws<span style="color: #000000"> Exception {
Scanner sc =<span style="color: #0000ff">new<span style="color: #000000"> Scanner(System.in);
System.out.println("请输入学生信息(格式为:姓名:年龄:成绩)举例(mary:20:90):"<span style="color: #000000">);
String info =<span style="color: #000000"> sc.nextLine();
String[] str = info.split(":"<span style="color: #000000">);
String name = str[0<span style="color: #000000">];
<span style="color: #0000ff">int age =Integer.parseInt(str[1<span style="color: #000000">]);
<span style="color: #0000ff">float grade =Float.parseFloat(str[2<span style="color: #000000">]);
<span style="color: #008000">//<span style="color: #008000">创建Class
Class<?> clazz = Class.forName("作业16_1_5_XML_正则_反射.student_2"<span style="color: #000000">);
<span style="color: #008000">//<span style="color: #008000">获取Studen的构造器
Constructor<?> con = clazz.getConstructor(String.<span style="color: #0000ff">class,<span style="color: #0000ff">int.<span style="color: #0000ff">class,<span style="color: #0000ff">float.<span style="color: #0000ff">class<span style="color: #000000">);
<span style="color: #008000">//<span style="color: #008000">创建对象并初始化Student
Object obj =<span style="color: #000000"> con.newInstance(name,age,grade);
<span style="color: #008000">//<span style="color: #008000">调用指定方法
Method m = clazz.getDeclaredMethod("toString"<span style="color: #000000">);
m.invoke(obj);
}
}
3<span style="color: #000000">. 将表中的数据用XML文档表示出来
班级编号 班级人数 学号 姓名 出生日期
08001 32 0800101 赵明 1985-12-23
08002 28 0800201 胡广飞 1985-10-05
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT students (student*)>
<!ELEMENT student (classId,number,name,data)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT classId (#PCDATA)>
<!ELEMENT number (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT data (#PCDATA)>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students SYSTEM "student_3.dtd">
<student id="0800201">
<span style="color: #0000ff">import<span style="color: #000000"> java.util.List;
<span style="color: #0000ff">import<span style="color: #000000"> java.util.Iterator;
<span style="color: #0000ff">import<span style="color: #000000"> org.dom4j.Attribute;
<span style="color: #0000ff">import<span style="color: #000000"> org.dom4j.Document;
<span style="color: #0000ff">import<span style="color: #000000"> org.dom4j.DocumentException;
<span style="color: #0000ff">import<span style="color: #000000"> org.dom4j.Element;
<span style="color: #0000ff">import<span style="color: #000000"> org.dom4j.io.SAXReader;
<span style="color: #0000ff">public <span style="color: #0000ff">class<span style="color: #000000"> student_3 {
<span style="color: #008000">/**<span style="color: #008000">
- 3.将student_3.XML的数据用XML文档表示出来
- <span style="color: #808080">@throws<span style="color: #008000"> DocumentException
<span style="color: #008000">*/
<span style="color: #0000ff">public <span style="color: #0000ff">static <span style="color: #0000ff">void main(String[] args) <span style="color: #0000ff">throws<span style="color: #000000"> DocumentException {
<span style="color: #008000">//<span style="color: #008000">1.读取文件形成DOM树
SAXReader sr=<span style="color: #0000ff">new<span style="color: #000000"> SAXReader();
Document doc = sr.read("Student_3.xml"<span style="color: #000000">);
<span style="color: #008000">//<span style="color: #008000">2.获取根节点students
Element el =<span style="color: #000000"> doc.getRootElement();
<span style="color: #008000">//<span style="color: #008000">3.从根节点中获取所有students信息
Iteratorit = el.elementIterator();<span style="color: #008000">//<span style="color: #008000">迭代器遍历节点信息
<span style="color: #008000">//<span style="color: #008000">4.处理所有的student信息
<span style="color: #0000ff">while<span style="color: #000000">(it.hasNext()){
<span style="color: #008000">//<span style="color: #008000">获取一个学生信息
Element ele =<span style="color: #000000"> it.next();
<span style="color: #008000">//<span style="color: #008000">获取一个学生的所有属性并输出:id
List list =<span style="color: #000000"> ele.attributes();
<span style="color: #0000ff">for<span style="color: #000000"> (Attribute a : list) {
String id =<span style="color: #000000"> a.getName();
String text =<span style="color: #000000"> a.getText();
System.out.println(id+"-"+<span style="color: #000000">text);
}
<span style="color: #008000">//<span style="color: #008000">获取一个学生的所有子元素并输出:name age score
Iteratorit2=<span style="color: #000000"> ele.elementIterator();
<span style="color: #0000ff">while<span style="color: #000000">(it2.hasNext()){
<span style="color: #008000">//<span style="color: #008000">获取一个子元素
Element next =<span style="color: #000000"> it2.next();
<span style="color: #008000">//<span style="color: #008000">获取一个子元素名称
String name=<span style="color: #000000">next.getName();
<span style="color: #008000">//<span style="color: #008000">获取元素文本
String info =<span style="color: #000000"> next.getText();
System.out.println(name+"="+<span style="color: #000000">info);
}
System.out.println("--------------------"<span style="color: #000000">);
}
}
}
六、 可选题
1<span style="color: #000000">. 根据下面内部DTD文档,完成后继的xml文档.
<!<span style="color: #000000">DOCTYPE 教师资料[
<!ELEMENT 教师资料(教师_inf)>
<!ELEMENT 教师_inf(教师,配偶?)>
<!ELEMENT 教师(姓名,年龄,性别,专业,电话)>
<!ELEMENT 姓名(#PCDATA)>
<!ELEMENT 年龄(#PCDATA)>
<!ELEMENT 性别(#PCDATA)>
<!ELEMENT 专业(#PCDATA)>
<!ELEMENT 电话(#PCDATA)>
<!ELEMENT 配偶(姓名,性别)>
<!ELEMENT 性名(#PCDATA)>
<!ELEMENT 性别(#PCDATA)><span style="color: #000000">
]>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students SYSTEM "TeachInfo_4.dtd">
<教师_inf>
<教师 >
<姓名>朱元璋</姓名>
<年龄>35</年龄>
<性别>男</性别>
<专业>军事</专业>
<电话>110</电话>
</教师>
<配偶 >
<姓名>马皇后</姓名>
<性别>女</性别>
</配偶>
</教师_inf>
<span style="color: #0000ff">import<span style="color: #000000"> java.util.Iterator;
<span style="color: #0000ff">import<span style="color: #000000"> org.dom4j.Document;
<span style="color: #0000ff">import<span style="color: #000000"> org.dom4j.Element;
<span style="color: #0000ff">import<span style="color: #000000"> org.dom4j.io.SAXReader;
<span style="color: #0000ff">public <span style="color: #0000ff">class<span style="color: #000000"> Teach_4 {
<span style="color: #0000ff">public <span style="color: #0000ff">static <span style="color: #0000ff">void main(String[] args) <span style="color: #0000ff">throws<span style="color: #000000"> Exception {
<span style="color: #008000">//<span style="color: #008000">创建事件处理器
SAXReader sr = <span style="color: #0000ff">new<span style="color: #000000"> SAXReader();
Document doc = sr.read("TeachInfo_4.xml"<span style="color: #000000">);
<span style="color: #008000">//<span style="color: #008000">获取xml的根节点
Element root =<span style="color: #000000"> doc.getRootElement();
<span style="color: #008000">//<span style="color: #008000">遍历根节点
Iterator
<span style="color: #0000ff">while<span style="color: #000000">(it.hasNext()){
Element el =<span style="color: #000000"> it.next();
<span style="color: #008000">//<span style="color: #008000">获取根节点属性值
Iterator
<span style="color: #0000ff">while<span style="color: #000000">(it2.hasNext()){
Element el2 =<span style="color: #000000"> it2.next();
String name =<span style="color: #000000"> el2.getName();
String text =<span style="color: #000000"> el2.getText();
System.out.println(name+"="+<span style="color: #000000">text);
}
}
}
}
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!