图形界面
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时间监听器
正则表达式
为什么要用正则表达式?
在程序开发中,难免会遇到需要匹配,查找,替换,判断字符串的情况发生,而这些情况有时又比较复杂,处理这种问题往往会浪费程序员的时间和精力,对于这种问题,就需要用到正则表达式
正则表达式:就是用某种模式去匹配一类字符串的一个公式。
正则表达式的组成:
有一些普通字符和一些元字符组成,普通字符包括大小写的字母和数字,而元字符则具有特殊的含义
常用正则表达式的构造摘要
@H_403_250@ 字符类 | |
[abc] |
a、b 或 c(简单类) |
[^abc] |
任何字符,除了 a、b 或 c(否定) |
[a-zA-Z] |
a 到 z 或 A 到 Z,两头的字母包括在内(范围) |
[a-d[m-p]] |
a 到 d 或 m 到 p:[a-dm-p](并集) |
[a-z&&[def]] |
d、e 或 f(交集) |
[a-z&&[^bc]] |
a 到 z,除了 b 和 c:[ad-z](减去) |
[a-z&&[^m-p]] |
a 到 z,而非 m 到 p:[a-lq-z](减去) |
|
任何字符(与行结束符可能匹配也可能不匹配) |
数字:[0-9] |
非数字: [^0-9] |
空白字符:[ \t\n\x0B\f\r] |
非空白字符:[^\s] |
单词字符:[a-zA-Z_0-9] |
非单词字符:[^\w] |
@H_403_250@ 边界匹配器 | |
^ |
行的开头 |
$ |
行的结尾 |
\b |
单词边界 |
\B |
非单词边界 |
\A |
输入的开头 |
\G |
上一个匹配的结尾 |
\Z |
输入的结尾,仅用于最后的结束符(如果有的话) |
\z |
输入的结尾 |
@H_403_250@ Greedy 数量词 | |
X? |
X,一次或一次也没有 |
X* |
X,零次或多次 |
X+ |
X,一次或多次 |
X{n} |
X,恰好 n 次 |
X{n,} |
X,至少 n 次 |
X{n,m} |
X,至少 n 次,但是不超过 m 次 |
Pattern类:指定要操作的正则表达式的规范
Matcher类:进行匹配验证。
String类对正则表达式的支持
replaceAll(String |
|
replaceFirst(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 + "\r\n");//打印到控制台
ps1.flush();
ps2.println(a + "\r\n");//输出到用户指定的文本文件中
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();
}
}
}