GUI、正则表达式
图形界面 AWT:中文译为抽象窗口工具包,是java提供的用来建立和设置java的图形界面的基本工具。AWT由java中的java.awt包提供,里面包含了许多用来建立与平台无关的图形界面GUI的类,这些类有被称为组件 GUI:1.组件-Component 组件:是java的图形界面的最基本的组成部分,是一个可以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。组件不能独立的显示出来,必须将组件方法一定的容器中才可以显示出来。来java.awt.Component是许多组件类的弗雷,Component类中封装了组件通用的方法和属性,如图形的组件对象。大小,显示位置,前景色和背景色,便捷,可见性 容器:Container是Component的子类,因此容器本身也是一个组件,具有组件的所有性质,但是它的主要功能是容纳其它组件和容器。一个容器可以容纳多个组件,并使它们成为一个整体。容器可以简化图形界面的设计,以整体结构来布局界面。所有的容器都可以通过add()方法向容器中添加组件。有三种类型的容器window、panel、scrollpane,常用的有panel、Frameapplet 布局管理器:每个容器都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器 AWT的缺点:awt组件的创建完全依赖操作系统实现,awt中引入了大量的系统函数,导致不同的操作系统下出现不同的外观。说白了,awt的组件是由操作系统绘制的,我们也说zaw组件是重量级的组件 Swing:是基于awt之上的,它除了顶级组件是重量级的,其它的组件(按钮,输入框)和布局都是与操作系统无关的轻量级的。 Swing是由100%纯java实现的,Swing组件是用jav实现的轻量级(light-weight)组件,没有本地号码,不依赖操作系统的支持,这是与AWT最大的区别 Swing式开发GUI的基本预定包括:Swing提供4个顶层容器Jframe Jdiialog Japple JWindow,如果是桌面应用,则GUI必须要有一个JFrame,如果是浏览器应用,则GUI必须要有一个JApplt。其它Swing组件,或自定义开发的Swing组件都扩展自JComponent,并且其实例要存在于顶层容器的层次书中 时间监听与处理 Event Listener时间监听器 正则表达式 为什么要用正则表达式? 在程序开发中,难免会遇到需要匹配,查找,替换,判断字符串的情况发生,而这些情况有时又比较复杂,处理这种问题往往会浪费程序员的时间和精力,对于这种问题,就需要用到正则表达式 正则表达式:就是用某种模式去匹配一类字符串的一个公式。 正则表达式的组成: 有一些普通字符和一些元字符组成,普通字符包括大小写的字母和数字,而元字符则具有特殊的含义 常用正则表达式的构造摘要
Pattern类:指定要操作的正则表达式的规范 Matcher类:进行匹配验证。 String类对正则表达式的支持
String类对正则表达式的支持比较完善,在以后开发中,使用正则表达式,一般直接使用String类即可 正则表达式的应用: 例一: public void fun1(){ String str = "hello3478,javaWorld67,hello"; String regex = "d+"; Pattern p = Pattern.compile(regex);//得到一个指定正则表达式 规范的模板 String[] s = p.split(str);//按照指定的正则表达式进行拆分字符串 for (String a:s){ System.out.print(a); } } 例二: import java.util.regex.Matcher; import java.util.regex.Pattern; public class TestMatcher { private void fun1(){ String str = "hello734,wo jiao 2352余松霖"; String regex = "[a-zA-Z]"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(str);//得到一个匹配器 String text = m.replaceAll("*"); System.out.println(text); } public static void main(String[] args) { TestMatcher t = new TestMatcher(); t.testFun(); } private void testFun() { String tel = "086-010-87455251"; String regex = "(d+)-(d+)-(d+)"; Matcher m = Pattern.compile(regex).matcher(tel); if(m.matches()){ System.out.println("国家代码:"+m.group(1)); System.out.println("区号:"+m.group(2)); System.out.println("电话号码:"+m.group(3)); }else System.out.println("错误"); String regex1 = "d{3,8}"; Matcher m1 = Pattern.compile(regex1).matcher(tel); System.out.println(m1.matches()); m.reset();//重置匹配器,使用find方法查找子序列时,最好重置匹配器 while (m1.find()){//判断tel字符串中,是否有匹配的正则表达式的子序列 // } } } IO流——网络编程——正则表达式综合练习 import java.io.*; import java.net.*; import java.util.*; import java.util.regex.*; / ** public class FindEmail { ServerSocket ss = null; Socket s = null; public void startServer(String course,String target) { try { ss = new ServerSocket(6666); while (true) { s = ss.accept(); new Thread(new FindEmailThread(s,course,target)).start(); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { FindEmail fe = new FindEmail(); fe.startServer("f:" + File.separator + "test","f:"); } } class FindEmailThread implements Runnable { private BufferedReader br1 = null;// 读取文件数据 private BufferedReader br2 = null;// 读取用户输入数据 private PrintStream ps1 = null;// 将用户需要的信息打印到控制台 private PrintStream ps2 = null;// 将用户需要的信息保存到文件中 private Socket s; private String source; // 源文件或目录 private String target; // 要存放信息的文件 public FindEmailThread(Socket s,String source,String target) { this.s = s; this.source = source; this.target = target; } public void run() { try { File file = new File(source); ps1 = new PrintStream(s.getOutputStream()); br2 = new BufferedReader(new InputStreamReader(s.getInputStream())); ps1.println("寻找邮箱请输入1,寻找手机号码请输入2"); String clientSay; while ((clientSay = br2.readLine()) != null) { if ("1".equals(clientSay)) { ps2 = new PrintStream(new FileOutputStream(target + File.separator + "emailMsg.txt"));//邮箱的存放路径 String regex = "w+@w+.(com|cn|net|org|gov)"; judgeFile(file,ps1,ps2,regex); // 判断file是否是文件或目录,然后对其操作 break; } else if ("2".equals(clientSay)) { ps2 = new PrintStream(new FileOutputStream(target + File.separator + "phoneMsg.txt"));//手机号码的存放路径 String regex = "d{11}"; judgeFile(file,regex); // 判断file是否是文件或目录,然后对其操作 break; } else ps1.println("输入错误,寻找邮箱请输入1,寻找手机号码请输入2"); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ close(); } } / ** private void judgeFile(File file,PrintStream ps1,PrintStream ps2, String regex) { if (file.isFile()) { //如果是文件就进行读取 this.readFile(file,regex); } else { File[] fs = file.listFiles(); for (int i = 0; i < fs.length; i++) { judgeFile(fs[i],regex); //递归文件夹 } } } / ** private void readFile(File file, String regex) { try { br1 = new BufferedReader(new InputStreamReader(new FileInputStream( file))); StringBuffer sbf = new StringBuffer();//将文件的数据装在一个StringBuffer进行操作 String str; while ((str = br1.readLine()) != null) {//读取文件 sbf.append(str); } String fileMsg = sbf.toString(); findMsg(fileMsg,regex); // } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ close(); } } / ** private void findMsg(String fileMsg, String regex) { Matcher m=Pattern.compile(regex).matcher(fileMsg); Set set = new HashSet(); m.reset(); while (m.find()){ set.add(fileMsg.substring(m.start(),m.end())); } for (String a : set) { ps1.println(a + "rn");//打印到控制台 ps1.flush(); ps2.println(a + "rn");//输出到用户指定的文本文件中 ps2.flush(); } } / ** public void close() { try { if (br1 != null) br1.close(); if (br2 != null) br1.close(); if (ps1 != null) br1.close(); if (ps2 != null) br2.close(); if (s != null) br1.close(); } catch (Exception e) { e.printStackTrace(); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |