图形界面

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

空白字符:[ \t\n\x0B\f\r]

\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 + "\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();

}

}

}

GUI、正则表达式的更多相关文章

  1. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. 如何在iOS中检测文本(字符串)语言?

    例如,给定以下字符串:我想检测每个声明的字符串中使用的语言.让我们假设已实现函数的签名是:如果没有检测到语言,则返回可选字符串.因此,适当的结果将是:有一个简单的方法来实现它吗?

  3. ios – 使用大写符号在字符串swift中获取URL的正则表达式

    我尝试在文本中获取URL.所以,在此之前,我使用了这样一个表达式:但是当用户输入带有大写符号的URL时(例如Http://Google.com,它与它不匹配)我遇到了问题.我试过了:但什么都没发生.解决方法您可以使用正则表达式中的i内联标志关闭区分大小写,有关可用正则表达式功能的详细信息,请参阅FoundationFrameworkReference.(?ismwx-ismwx)Flagsetti

  4. ios – 如何在Swift 3中使用正则表达式?

    解决方法我相信.当没有其他选项适用时,将使用.allZeros.因此,使用Swift3,您可以传递一个空的选项列表或省略options参数,因为它默认为无选项:要么请注意,在Swift3中,您不再使用error参数.它现在抛出.

  5. ios – lldb断点在类目标c中的所有方法

    如何使用lldb在ObjectiveC类中的所有方法上自动设置断点?

  6. ios – Swift:如何从不同的swift文件中调用函数

    我的Xcode6beta-2项目中有多个类型为UIViewController的swift文件.我基本上想知道文件A中的一些数据在文件B中使用.我的文件都是UIViewControllers,我创建了一个没有参数的函数,它返回UIViewController_A中的字符串.当我尝试在UIViewController_B中调用所述函数时,intellisense为我填写,但是我必须有一个自动填充为U

  7. ios – 如何使用SwiftyJSON将字符串转换为JSON

    要转换的字符串:[{“description”:“Hi”,“id”:2,“img”:“hi.png”},{“description”:“pet”,“id”:10,“img”:“pet.png“},{”description“:”Hello!:D“,”id“:12,”img“:”hello.png“}]转换字符串的代码:varjson=JSON该字符串转换为JSON,当我尝试计算这个JSON里面有多少个块时,我得到0.打印控制台输出:0我失踪了什么帮助非常感激.解决方法实际上,在SwifyJSON中有一个内

  8. ios – 将两个字符串转换为一组布尔值的快速方法是什么?

    我有一个长字符串,我想转换为一个布尔值数组.而且它需要很多次,很快.我天真的尝试是这样的:但这比我想要的要慢很多.我的剖析告诉我,地图是减速的地方,但我不知道我能做多么简单.我觉得如果没有Swift’s/ObjC的开销,这样做会很快.在C中,我认为这是一个简单的循环,其中一个字节的内存与一个常量进行比较,但我不知道我应该看的是什么函数或语法.有更好的办法吗?

  9. ios – 在Spritekit游戏中限制GUI元素的比例

    如果我使用375×667尺寸的场景,那么一切都正确定位并具有良好的比例,但质量受损解决方法统一的GUI和游戏据我所知,处理统一GUI和游戏的最佳方法是设置场景大小,让SpriteKit从那里扩展.这是iPhone6的分数.因为SpriteKit在点上工作但设备以像素显示,对于@2x设备,场景大小将为750pxx1354px像素,对于iPhone6,场景大小将为1125pxx2031px.这如何与资产一起使用?对于Apple来说,这是一个更好的问题.显然,SpriteKit不支持纹理图集中的@3x图像.SO

  10. 如何在Xcode 4中自动生成Core Data GUI?

    我正在通过基于Xcode3编写的Mac上的LearnCocoa工作,我正在使用v4.到目前为止,我已经能够相当容易地找到解决差异的方法,但现在我正在介绍CoreData的一章,还有一部分关于能够通过Option从实体拖动到IB中的窗口来自动生成GUI,但我似乎无法在Xcode4中做到这一点.它仍然可能,或者那个能力是否与v3一起死亡?

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部