加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

GUI、正则表达式

发布时间:2020-12-14 01:17:27 所属栏目:百科 来源:网络整理
导读:图形界面 AWT :中文译为抽象窗口工具包,是 java 提供的用来建立和设置 java 的图形界面的基本工具。 AWT 由 java 中的 java.awt 包提供,里面包含了许多用来建立与平台无关的图形界面 GUI 的类,这些类有被称为组件 GUI : 1. 组件 -Component 2. 容器 -Co

图形界面

AWT:中文译为抽象窗口工具包,是java提供的用来建立和设置java的图形界面的基本工具。AWTjava中的java.awt包提供,里面包含了许多用来建立与平台无关的图形界面GUI的类,这些类有被称为组件

GUI1.组件-Component 2.容器-Container 3.布局管理器-LayoutManager

组件:是java的图形界面的最基本的组成部分,是一个可以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。组件不能独立的显示出来,必须将组件方法一定的容器中才可以显示出来。来java.awt.Component是许多组件类的弗雷,Component类中封装了组件通用的方法和属性,如图形的组件对象。大小,显示位置,前景色和背景色,便捷,可见性

容器ContainerComponent的子类,因此容器本身也是一个组件,具有组件的所有性质,但是它的主要功能是容纳其它组件和容器。一个容器可以容纳多个组件,并使它们成为一个整体。容器可以简化图形界面的设计,以整体结构来布局界面。所有的容器都可以通过add()方法向容器中添加组件。有三种类型的容器windowpanelscrollpane,常用的有panelFrameapplet

布局管理器:每个容器都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器

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时间监听器 AWTSwing都有相似的时间监听器模型。他们都使用观察者模式,组件和监听器的连接方式是把监听器添加到组件上,这组成了一个对象网络的模型。当事件被处罚并分发给组件,组件调用它的监听器以处理事件

正则表达式

为什么要用正则表达式?

在程序开发中,难免会遇到需要匹配,查找,替换,判断字符串的情况发生,而这些情况有时又比较复杂,处理这种问题往往会浪费程序员的时间和精力,对于这种问题,就需要用到正则表达式

正则表达式:就是用某种模式去匹配一类字符串的一个公式。

正则表达式的组成:

有一些普通字符和一些元字符组成,普通字符包括大小写的字母和数字,而元字符则具有特殊的含义

常用正则表达式的构造摘要

字符类

[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](减去)

预定义字符类

.

任何字符(与行结束符可能匹配也可能不匹配)

d

数字:[0-9]

D

非数字: [^0-9]

s

空白字符:[ tnx0Bfr]

S

非空白字符:[^s]

w

单词字符:[a-zA-Z_0-9]

W

非单词字符:[^w]

边界匹配器

^

行的开头

$

行的结尾

b

单词边界

B

非单词边界

A

输入的开头

G

上一个匹配的结尾

Z

输入的结尾,仅用于最后的结束符(如果有的话)

z

输入的结尾

Greedy 数量词

X?

X,一次或一次也没有

X*

X,零次或多次

X+

X,一次或多次

X{n}

X,恰好 n

X{n,}

X,至少 n

X{n,m}

X,至少 n 次,但是不超过 m

Pattern:指定要操作的正则表达式的规范

Matcher:进行匹配验证。

String类对正则表达式的支持

boolean

matches(Stringregex)

告知此字符串是否匹配给定的正则表达式

String

replaceAll(Stringregex, Stringreplacement)

使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

String

replaceFirst(Stringregex, Stringreplacement)

使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。

String[]

split(Stringregex)

根据给定正则表达式的匹配拆分此字符串。

String[]

split(Stringregex,intlimit)

根据匹配给定的正则表达式来拆分此字符串。

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字符串中,是否有匹配的正则表达式的子序列

//System.out.println(m1.start()+" "+m1.end());//返回的开始和技术索引

System.out.println(tel.substring(m1.start(),m1.end()));

}

}

}

IO流——网络编程——正则表达式综合练习

import java.io.*;

import java.net.*;

import java.util.*;

import java.util.regex.*;

/ **

* @author Administrator

*写一个服务器,要求根据用户 输入文件路径(要求用户可以输入一个文件,或文件夹路径,注意要是文件夹,可能文件夹中还嵌套这文件夹)

*中找出文件里面里面存放的用户指定信息(比如邮箱) ,并把找出的信息(比如邮箱)

*保存到一个用户指定的文本文件中。

* /

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();

}

}

/ **

* @param file

* 判断此file是文件还是目录,然后对其操作

* /

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); //递归文件夹

}

}

}

/ **

* @param file

* 读取文本文件

* /

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();

}

}

/ **

* @param fileMsg

* 寻找用户需要的手机号码或者邮箱

* @param ps1

* /

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();

}

}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读