仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 481|回复: 10
打印 上一主题 下一主题

[学习教程] JAVA网站制作之Java中利用正则表达式完成字符串婚配

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:11:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
JAVA学习必须明确这是一项投资,对于大多数的人来说,学习JAVA是为了就业,还有就是刚走向工作位置的朋友想尽快赶上工作的节奏。正则|字符串  暗中光阴

  有一个String,怎样查询个中是不是有y和f字符?最暗中的举措就是:

  程序1:我晓得if、for语句和charAt()啊。

classTest{
 publicstaticvoidmain(Stringargs[]){
  Stringstr="Formymoney,theimportantthing"+"aboutthemeetingwasbridge-building";
  charx=y;
  chary=f;
  booleanresult=false;
  for(inti=0;i<str.length;i++){
   charz=str.charAt(i);//System.out.println(z);
   if(x==z||y==z){
    result=true;
    break;
   }
   elseresult=false;
  }
  System.out.println(result);
 }
}

  仿佛很直不雅,但这类体例难以对付庞大的事情。如查询一段笔墨中,是不是有is?是不是有thing或ting等。这是一个厌恶的事情。

  Java的java.util.regex包

  依照面向对象的思绪,把但愿查询的字符串如is、thing或ting封装成一个对象,以这个对象作为模板往婚配一段笔墨,就加倍天然了。作为模板的谁人工具就是上面要会商的正则表达式。先不思索那末庞大,看一个例子:程序2:不懂。先看看能够吧?

importjava.util.regex.*;

classRegex1{
 publicstaticvoidmain(Stringargs[]){
  Stringstr="Formymoney,theimportantthing"+"aboutthemeetingwasbridge-building";
  StringregEx="a|f";//暗示a或f
  Patternp=Pattern.compile(regEx);
  Matcherm=p.matcher(str);
  booleanresult=m.find();
  System.out.println(result);
 }
}

  假如str婚配regEx,那末result为true,不然为flase。假如想在查找时疏忽巨细写,则能够写成:

Patternp=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);

  固然临时不晓得Pattern(模板、形式)和Matcher(婚配器)的细节,程序的感到就对照爽,假如先查询is、厥后又要查询thing或ting,我们只必要修正一下模板Pattern,而不是思索if语句和for语句,大概经由过程charAt()。

  1、写一个特别的字符串――正则表达式如a|f。

  2、将正则表达式编译成一个模板:p

  3、用模板p往婚配字符串str。

  思绪分明了,如今看Java是怎样处置的(Java程序员直到JDK1.4才干利用这些类。

  Pattern类与查找

  ①publicfinalclassjava.util.regex.Pattern是正则表达式编译后的表达法。上面的语句将创立一个Pattern对象并赋值给句柄p:Patternp=Pattern.compile(regEx);

  风趣的是,Pattern类是final类,并且它的机关器是private。大概有人告知你一些计划形式的工具,大概你本人查有关材料。这里的结论是:Pattern类不克不及被承继,我们不克不及经由过程new创立Pattern类的对象。

  因而在Pattern类中,供应了2个重载的静态办法,其前往值是Pattern对象(的援用)。如:

publicstaticPatterncompile(Stringregex){
 returnnewPattern(regex,0);
}

  固然,我们能够声明Pattern类的句柄,如Patternp=null;

  ②p.matcher(str)暗示以用模板p往天生一个字符串str的婚配器,它的前往值是一个Matcher类的援用,为何要这个工具呢?依照天然的设法,前往一个boolean值不可吗?

  我们能够复杂的利用以下办法:

booleanresult=Pattern.compile(regEx).matcher(str).find();

  实际上是三个语句兼并的无句柄体例。无句柄经常不是好体例。前面再进修Matcher类吧。先看看regEx――这个怪咚咚。

  正则表达式之限制符

  正则表达式(RegularExpression)是一种天生字符串的字符串。晕吧。好比说,StringregEx="me+";这里字符串me+可以天生的字符串是:me、mee、meee、meeeeeeeeee等等,一个正则表达式大概天生无量的字符串,以是我们不成能(有需要吗?)输入正则表达式发生的一切工具。

  反过去思索,关于字符串:me、mee、meee、meeeeeeeeee等等,我们可否有一种言语往形貌它们呢?明显,正则表达式言语是这类言语,它是一些字符串的形式――简便而深入的形貌。

  我们利用正则表达式,用于字符串查找、婚配、指定字符串交换、字符串支解等等目标。

  天生字符串的字符串――正则表达式,真有些庞大,由于我们但愿由一般字符(比方字符a到z)和特别字符(称为元字符)形貌恣意的字符串,并且要正确。

  先看几个正则表达式例子:

  程序3:我们总用这个程序测试正则表达式。

importjava.util.regex.*;

classRegex1{
 publicstaticvoidmain(Stringargs[]){
  Stringstr="Formymoney,theimportantthing";
  StringregEx="ab*";
  booleanresult=Pattern.compile(regEx).matcher(str).find();
  System.out.println(result);
 }
}//ture

  ①"ab*"――能婚配a、ab、abb、abbb……。以是,*暗示后面字符能够有零次或屡次。假如仅仅思索查找,间接用"a"也一样。但想一想交换的情形。成绩regEx="abb*"了局怎样?

  ②"ab+"――能婚配ab、abb、abbb……。等价于"abb*"。成绩regEx="or+"了局怎样?

  ③"or?"――能婚配o和or。?暗示后面字符能够有零次或一次。

  这些限制符*、+、?便利地暗示了其后面字符(子串)呈现的次数(我们用{}来形貌):x*,零次或屡次≡{0,}
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。
分手快乐 该用户已被删除
沙发
发表于 2015-1-20 16:44:26 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
简单生活 该用户已被删除
板凳
发表于 2015-1-24 12:16:37 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
爱飞 该用户已被删除
地板
发表于 2015-1-26 16:57:16 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
透明 该用户已被删除
5#
发表于 2015-2-4 16:29:00 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
活着的死人 该用户已被删除
6#
发表于 2015-2-7 07:01:47 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
再现理想 该用户已被删除
7#
发表于 2015-2-20 23:51:17 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
8#
发表于 2015-3-6 19:07:21 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
山那边是海 该用户已被删除
9#
发表于 2015-3-13 06:09:38 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
小女巫 该用户已被删除
10#
发表于 2015-3-13 06:09:40 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
因胸联盟 该用户已被删除
11#
发表于 2015-3-20 14:35:51 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 04:21

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表