1、经典编程小事例反射与正则 1.给一个 ArrayList集合中添加一个字符串数据,并显示* 思路:1,获取这个集合的字节码对象 然后通过Class对象获取该集合对象.* 2.再用Class对象获取集合的add方法对象Method* 3.再把class对象与添加的字符串当参数传给Method的方法invoke.import java.lang.reflect.Method;import java.util.ArrayList;import java.util.List;public class Test public static void main(String args) throws Ex
2、ception List list = new ArrayList();Class cls = list.getClass();ArrayList obj =(ArrayList)cls.newInstance();Method mt = cls.getMethod(“add“,Object.class);mt.invoke(obj, “String“);/obj.add(“String“);这样则无法编译通过System.out.println(obj);2. 通过配置文件运行类中的方法import java.io.FileInputStream;import java.lang.refle
3、ct.Method;import java.util.Properties;/* 思路:* 1,先将文件写入字节流,然后将字节流写入Properties集合中* 2,通过getProperties方法获取方法名和类名* 3,再通过类名获取其class对象* 4.通过对象和方法名获取其方法*/public class Test public static void main(String args) throws ExceptionFileInputStream file = new FileInputStream(“Show.txt“);Properties pro = new Propert
4、ies();pro.load(file);file.close();/通过键值对获取对应的类名和方法名String className = pro.getProperty(“className“);String methodName= pro.getProperty(“methodName“);/通过反射获得字节码对象和方法对象Class cls = Class.forName(className);Object obj =cls.newInstance();Method mt = cls.getMethod(methodName,null);/方法一定要公用public/如果是getDecl
5、aredMethod, 则也可以获取非公有方法/如果方法私用,那么要先暴力破解:mt.setAccessible(true);mt.invoke(obj,null);3.随即输入 QQ 号:校验 QQ 号码:不能以 0 开头 是 5-15 位的数字import java.util.Scanner;* * 思路:用正则定义规范,再用String类的匹配方法match方法判断时否正确public class Test public static void main(String args) Scanner sc = new Scanner(System.in);String qq = sc.nex
6、tLine();String segex =“00-94,14“;boolean flag= qq.matches(segex);if (flag) System.out.println(qq);elseSystem.out.println(“输入格式错误“ );4. 邮件校验/String regex = “a-zA-Z_0-9+a-zA-Z_0-9+(.a-zA-Z_0-9+)+“;/用w 改写规则w 表示:单词字符:a-zA-Z_0-9 /反斜杠的用法:当在字符串中,表示转义,所以要表示明确意思要用两个反斜杠String regex = “w+w+(.w+)+“;boolean flag
7、 = eamil.matches(regex);System.out.println(flag);5.将字符串还原成:“我要学编程” 。如:我.我.要.String s = “我我.我.我. 要.要要.要学. 学学. 学. 编. 编编. 编.程. 程.程.程“;String regex = “.+“;/先把点去掉s=s.replaceAll(regex, “);System.out.println(s);s=s.replaceAll(“(.)1+“, “$1“);/再去叠词,注意:这里$1表示前面(.)1内的值,也就是任意 值.() 是组意思System.out.println(s);6.能将
8、这些 ip 地址排序。按照地址段数值从小到大排序。“192.168.3.23 202.10.34.2 3.3.3.3 127.0.0.1 80.12.23.34“思路:* ip地址都是字符串,所有字符串排序,用TreeSet。* 如果用TreeSet现在存在每个ip地址,就会有问题。因为有部分ip没有满足三位。* 这样比较是有问题的, 所有,我们采取补位的方式。* 1:先 给每个ip地址的每一个位在前面补2个0 。* 2:把超出 3位的数据,截取成 3位。*/public class Test public static void main(String args) String str =
9、“192.168.3.23 202.10.34.2 3.3.3.3 127.0.0.1 80.12.23.34“;/ 先补2个0str = str.replaceAll(“(d+)“, “00$1“);System.out.println(str);/ 去除超出3位的前面的0str = str.replaceAll(“0*(d3)“, “$1“);System.out.println(str);/ 切割String ips = str.split(“ “);/ 我遍历这个字符串数 组,把每个数据添加到 TreeSet集合中。TreeSet ts = new TreeSet();for (Str
10、ing s : ips) ts.add(s);/ System.out.println(s);/System.out.println(ts);/最后遍历集合,把前面的 0干掉for(String s : ts)s = s.replaceAll(“0*(d+)“, “$1“);System.out.println(s);网络编程:1.模拟 Tcp 协议的传输过程*/public class Test public static void main(String args) throws IOException /定义客户端端口Socket s = new Socket(“192.168.1.11
11、1“,10086);/定义读取键盘输 入的流BufferedReader br = new BufferedReader(new InputStreamReader(System.in);OutputStream in = s.getOutputStream();PrintWriter pw = new PrintWriter(in,true);/定义读取服务 器的字符流BufferedReader br1 = new BufferedReader(new InputStreamReader(s.getInputStream();String s1=null;/写入服务器while(s1=br
12、.readLine()!=null) if (“over“.equals(s1)break;pw.println(s1);/读取服务器写入的数据String s3= br1.readLine();System.out.println(s3);pw.close();br.close();s.close();服务器端public static void main(String args) throws IOException /定义服务器接收端口ServerSocket ss = new ServerSocket(10086);/或取服务器Socket 接口Socket s = ss.accept
13、();/获取读取客户端的流BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream();/定义输出客户端数据的流PrintWriter pw=new PrintWriter(System.out,true);/获取反馈输出客户 端的流PrintWriter pw2=new PrintWriter(s.getOutputStream(),true);/写入客户端数据到控制台String str =null;while(str=br.readLine()!=null)pw.println(str);/
14、反馈回数据到客 户端pw2.println(“收到“ );ss.close();s.close();2.模拟 UDP 协议做一个聊天工具创建接收端与发送端发送端设立端口,用字符缓冲流读取数据打包发送接收端设立接收端口,接收数据包,用包的方法解析包的数据,打印到控制台/创建发送服务端DatagramSocket ds = new DatagramSocket();/ 创建键盘录入 对象,并用转换流进行转换 后高效处理BufferedReader bs= new BufferedReader(new InputStreamReader(System.in);String s =null;while
15、(s=bs.readLine()!=null)/ 把每一行的数据 进行封装byte bye =s.getBytes();DatagramPacket dp = new DatagramPacket(bye,bye.length,InetAddress.getByName(“fada-pc“),11111);/打包发送ds.send(dp);ds.close();bs.close();/ 创建接收端的服务DatagramSocket ds = new DatagramSocket(11111);/ 用循环接收数据while (true) / 定义一个容器接收数据,把 这个容器 传递给数据包byt
16、e bye = new byte1024;/ 调用接收方法接受数据DatagramPacket dp = new DatagramPacket(bye, bye.length);ds.receive(dp);/ 解析数据String ip = dp.getAddress().getHostAddress();String text = new String(dp.getData(), 0, dp.getLength();/ 打印数据System.out.println(ip + “-“ + text);3.如何通过主机 q 或 IP 文本,获取 IP 和电脑名称主要运用 InetAddress
17、 类和其下面的 getByName getHostAdddress getHostName 方法public static void main(String args)throws UnknownHostException InetAddress id1 = InetAddress.getByName(“fada-pc“);InetAddress id = InetAddress.getByName(“192.168.1.111“);String ip = id.getHostAddress();String name = id.getHostName();System.out.println
18、(ip+“-“+name);System.out.println(id1.getHostAddress()+“-“+id1.getHostName();IO 流1.要求获取一个程序运行的次数,如果满足 5 次,那么该程序退出, 请给出注册的提示,并结束思路:* 1:定 义计数器记录 程序的运行次数。* 由于这个次数如果是记录在程序中,那么程序结束,下次再开始运行,记录次数又重头开始。* 所以,我们需要把次数记录在一个文件中。* 2:每次我 们可以从一个文件中 读取一个次数,进行判断,看我们的程序是否还可以运行。* 如果可以,就让程序继续,否则,提示要注册。* 3:假如一个文件中,只记录一个数字
19、没什么意义。所以,我们采用键值对的方式记录。* 这样呢,我们就考虑到了Properties这个对象。*/public class Test public static void main(String args) try boolean flag = runCount();if (!flag) System.out.println(“请拿钱注册“ );return; catch (IOException e) e.printStackTrace();System.out.println(“开始玩游戏.“);System.out.println(“玩游戏.“);System.out.printl
20、n(“结束玩游戏.“);/ 每次读取文件,获 取键值对中的值进行判断,如果大于 5次就改真假值。public static boolean runCount() throws IOException boolean flag = true;/ 定义一个属性文件 (.properties, .ini xml)File countFile = new File(“count.properties“);/ 判断文件是否存在,如果不存在就 创建文件if (!countFile.exists() countFile.createNewFile();/ 定义我们记录 数据的格式:count=值Proper
21、ties prop = new Properties();/ 把数据从文件中加 载到集合中FileInputStream fis = new FileInputStream(countFile);prop.load(fis);fis.close();/ 通过键获取值int num = 0;String value = prop.getProperty(“count“);if (value != null) num = Integer.parseInt(value);if (num = 5) flag = false;num+;/ 设置值prop.setProperty(“count“, num
22、 + “);/ 把集合中的数据重新写回文件FileOutputStream fos = new FileOutputStream(countFile);prop.store(fos, null);fos.close();return flag;2.实现一个包装类,让读出的每一行自动加上行号和:号public class Test2 extends BufferedReader private int lineNumber;public Test2(Reader r) super(r);public String myReadLine() throws IOException lineNumbe
23、r+;if (super.readLine()!=null) return lineNumber+“:“+super.readLine();elsereturn null;3.*需求:把 Properties.txt 中键为 count 的值改为 100*读出到Properties集合- 用load()方法*再从转化成 set集合遍历出count 键, 再用getProperty 写入新值*再用list或store 方法写放到文件中*/public class Test public static void main(String args) throws IOException FileIn
24、putStream fs = new FileInputStream(“Properties.txt“);Properties pp = new Properties();pp.load(fs);fs.close();System.out.println(pp);Set set =pp.keySet();Set set1 =pp.stringPropertyNames();for (Object obj:set) String s =(String)obj;if(s.equals(“count“)pp.setProperty(s, 100+“);PrintWriter pw = new Pri
25、ntWriter(new FileWriter(“Properties.txt“),true);pp.list(pw);pw.close();4.键盘输入转大写在控制台显示public static void main(String args) throws IOException BufferedReader br = new BufferedReader(new InputStreamReader(System.in);PrintWriter pw = new PrintWriter(System.out,true);String line = null;while(line=br.readLine()!=null)pw.println(line.toUpperCase();br.close();pw.close();
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。