﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-从制造到创造-随笔分类-学习笔记</title><link>http://www.blogjava.net/coderdream/category/29710.html</link><description>软件工程师成长之路</description><language>zh-cn</language><lastBuildDate>Thu, 26 Aug 2010 17:29:17 GMT</lastBuildDate><pubDate>Thu, 26 Aug 2010 17:29:17 GMT</pubDate><ttl>60</ttl><item><title>【视频笔记】Java反射机制笔记</title><link>http://www.blogjava.net/coderdream/archive/2010/08/25/329888.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Wed, 25 Aug 2010 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2010/08/25/329888.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/329888.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2010/08/25/329888.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/329888.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/329888.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 视频名称：[A218]JAVA反射机制与动态代理.exe[A219]JAVA反射机制与动态代理续一.exe[A220]JAVA反射机制与动态代理续二.exe主讲教师：风中叶Java 语言的反射机制在Java运行时环境中，对于任意一个类，可以知道这个类有哪些属性和方法。对于任意一个对象，可以调用它的任意一个方法。这种动态获取类的信息以及动态调用对象的方法的功能...&nbsp;&nbsp;<a href='http://www.blogjava.net/coderdream/archive/2010/08/25/329888.html'>阅读全文</a><img src ="http://www.blogjava.net/coderdream/aggbug/329888.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2010-08-25 16:12 <a href="http://www.blogjava.net/coderdream/archive/2010/08/25/329888.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>非常不错的Flash报表工具-FusionCharts</title><link>http://www.blogjava.net/coderdream/archive/2010/02/03/311779.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Wed, 03 Feb 2010 03:16:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2010/02/03/311779.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/311779.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2010/02/03/311779.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/311779.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/311779.html</trackback:ping><description><![CDATA[我们在软件开发中，经常需要以表格的方式展现批量数据，如统计分析等等。<br />
<br />
这里介绍一个Flash的表格生成工具--FusionCharts，它是一个收费软件，不过如果不是用于商业用途，只是用于，可以到网上下载破解版，csdn上面就有，如果想商业，购买应该也不贵。<br />
<br />
下面我们来看一个最简单的例子：<br />
这个软件生成表格的模式是：数据（XML文件或文件流）+模板。<br />
<br />
1、XML数据：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">chart&nbsp;</span><span style="color: #ff0000;">caption</span><span style="color: #0000ff;">='Monthly&nbsp;</span><span style="color: #ff0000;">Sales&nbsp;Summary'&nbsp;subcaption</span><span style="color: #0000ff;">='For&nbsp;</span><span style="color: #ff0000;">the&nbsp;year&nbsp;2006'&nbsp;xAxisName</span><span style="color: #0000ff;">='Month'&nbsp;</span><span style="color: #ff0000;">yAxisName</span><span style="color: #0000ff;">='Sales'&nbsp;</span><span style="color: #ff0000;">numberPrefix</span><span style="color: #0000ff;">='$'&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">&lt;set&nbsp;label</span><span style="color: #0000ff;">='January'&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">='17400'&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">set&nbsp;</span><span style="color: #ff0000;">label</span><span style="color: #0000ff;">='February'&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">='19800'&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">set&nbsp;</span><span style="color: #ff0000;">label</span><span style="color: #0000ff;">='March'&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">='21800'&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">set&nbsp;</span><span style="color: #ff0000;">label</span><span style="color: #0000ff;">='April'&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">='23800'&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">set&nbsp;</span><span style="color: #ff0000;">label</span><span style="color: #0000ff;">='May'&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">='29600'&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">set&nbsp;</span><span style="color: #ff0000;">label</span><span style="color: #0000ff;">='June'&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">='27600'&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">set&nbsp;</span><span style="color: #ff0000;">label</span><span style="color: #0000ff;">='July'&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">='31800'&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">set&nbsp;</span><span style="color: #ff0000;">label</span><span style="color: #0000ff;">='August'&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">='39700'&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">set&nbsp;</span><span style="color: #ff0000;">label</span><span style="color: #0000ff;">='September'&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">='37800'&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">set&nbsp;</span><span style="color: #ff0000;">label</span><span style="color: #0000ff;">='October'&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">='21900'&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">set&nbsp;</span><span style="color: #ff0000;">label</span><span style="color: #0000ff;">='November'&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">='32900'&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">set&nbsp;</span><span style="color: #ff0000;">label</span><span style="color: #0000ff;">='December'&nbsp;</span><span style="color: #ff0000;">value</span><span style="color: #0000ff;">='39800'&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">chart</span><span style="color: #0000ff;">&gt;</span></div>
<br />
2、将所有需要用到的模板拷贝到固定的位置。<br />
<br />
3、在html中指定数据位置和模板名称：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">My&nbsp;First&nbsp;FusionCharts</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body&nbsp;</span><span style="color: #ff0000;">bgcolor</span><span style="color: #0000ff;">="#ffffff"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">object&nbsp;</span><span style="color: #ff0000;">classid</span><span style="color: #0000ff;">="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"</span><span style="color: #ff0000;">&nbsp;codebase</span><span style="color: #0000ff;">="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"</span><span style="color: #ff0000;">&nbsp;width</span><span style="color: #0000ff;">="900"</span><span style="color: #ff0000;">&nbsp;height</span><span style="color: #0000ff;">="300"</span><span style="color: #ff0000;">&nbsp;id</span><span style="color: #0000ff;">="Column3D"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">param&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="movie"</span><span style="color: #ff0000;">&nbsp;value</span><span style="color: #0000ff;">="../FusionCharts/Column3D.swf"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">param&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="FlashVars"</span><span style="color: #ff0000;">&nbsp;value</span><span style="color: #0000ff;">="&amp;dataURL=Data.xml"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">param&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="quality"</span><span style="color: #ff0000;">&nbsp;value</span><span style="color: #0000ff;">="high"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">embed&nbsp;</span><span style="color: #ff0000;">src</span><span style="color: #0000ff;">="../FusionCharts/Column3D.swf"</span><span style="color: #ff0000;">&nbsp;flashVars</span><span style="color: #0000ff;">="&amp;dataURL=Data.xml"</span><span style="color: #ff0000;">&nbsp;quality</span><span style="color: #0000ff;">="high"</span><span style="color: #ff0000;">&nbsp;width</span><span style="color: #0000ff;">="900"</span><span style="color: #ff0000;">&nbsp;height</span><span style="color: #0000ff;">="300"</span><span style="color: #ff0000;">&nbsp;name</span><span style="color: #0000ff;">="Column3D"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="application/x-shockwave-flash"</span><span style="color: #ff0000;">&nbsp;pluginspage</span><span style="color: #0000ff;">="http://www.macromedia.com/go/getflashplayer"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">object</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span></div>
<br />
4、运行结果：<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/201002/FusionCharts01.gif" height="254" width="880" /><br />
<br />
<img src ="http://www.blogjava.net/coderdream/aggbug/311779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2010-02-03 11:16 <a href="http://www.blogjava.net/coderdream/archive/2010/02/03/311779.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle数据库安装及配置</title><link>http://www.blogjava.net/coderdream/archive/2009/10/18/298760.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Sun, 18 Oct 2009 12:13:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2009/10/18/298760.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/298760.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2009/10/18/298760.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/298760.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/298760.html</trackback:ping><description><![CDATA[<br />
<h2>1、安装</h2>
<p>Oracle 版本：Oracle Database 10g Release 2 (10.2.0.1)</p>
<p>下载地址：</p>
<p><a title="http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201winsoft.html" href="http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201winsoft.html">http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201winsoft.html</a></p>
<p>安装设置：</p>
<p>1）这里的全局数据库名即为你创建的数据库名，以后在访问数据，创建&#8220;本地Net服务名&#8221;时用到；</p>
2）数据库口令在登录和创建&#8220;本地Net服务名&#8221;等地方会用到。<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0001.jpg" border="0" /><br />
<br />
<h2>2、创建&#8220;本地Net服务名&#8221;</h2>
<h3>1）通过【程序】-》【Oracle - OraDb10g_home1】-》【配置和移植工具】-》【Net Configuration Assistant】，运行&#8220;网络配置助手&#8221;工具：</h3>
<img alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0002.jpg" border="0" /> <br />
<h3>2）选择&#8220;本地 Net 服务名配置&#8221;：</h3>
<img alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0003.jpg" border="0" /><br />
<br />
<h3>3）这里的&#8220;Net 服务名&#8221;我们输入安装数据库时的&#8220;全局数据库名&#8221;：</h3>
<img height="395" alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0004.jpg" width="600" border="0" /><br />
<br />
<h3>4）主机名我们输入本机的IP地址：</h3>
<img height="395" alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0005.jpg" width="600" border="0" /><br />
<br />
<h3>5）测试数据库连接，用户名/密码为：System/数据库口令（安装时输入的&#8220;数据库口令&#8221;）：</h3>
<p>&nbsp;<img height="395" alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0006.jpg" width="600" border="0" /><br />
<br />
默认的用户名/密码错误：</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0007.jpg" border="0" /><br />
<br />
更改登录，输入正确的用户名/密码：<br />
<br />
</p>
<p><img height="194" alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0008.jpg" width="191" border="0" /><br />
<br />
测试成功：<br />
<br />
</p>
<h2><img alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0009.jpg" border="0" /></h2>
<h2><br />
3、PLSQL Developer 连接测试</h2>
<p>输入正确的用户名/口令：</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0010.jpg" border="0" /><br />
<br />
成功登陆：</p>
<p>&nbsp;<img alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0011.jpg" border="0" /><br />
<br />
</p>
<h2>4、创建表空间</h2>
<p>打开sqlplus工具：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">sqlplus&nbsp;</span> <span style="color: #808080">/</span><span style="color: #000000">nolog</span> </div>
<p>&nbsp;连接数据库：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">conn&nbsp;</span><span style="color: #808080">/</span><span style="color: #0000ff">as</span> <span style="color: #000000">sysdba</span></div>
<p>&nbsp;创建表空间：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">create tablespace camds datafile 'D:\oracle\product\10.2.0\oradata\camds\camds.dbf' size 200m autoextend on next 10m maxsize unlimited;</span></div>
<br />
<h2>5、创建新用户</h2>
运行&#8220;P/L SQL Developer&#8221;工具，以DBA（用户名：System）的身份登录：<br />
<h3>1）新建&#8220;User（用户）： </h3>
<img alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0012.jpg" border="0" /> <br />
<h3>2）设置用户名、口令、默认表空间（使用上面新建的表空间）和临时表空间：<br />
</h3>
<img alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0013.jpg" border="0" /> <br />
<h3>3）设置角色权限：</h3>
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0014.jpg" border="0" /> <br />
<h3>4）设置&#8221;系统权限&#8220;：</h3>
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0015.jpg" border="0" /><br />
<h3>5）点击应用后，【应用】按钮变灰，新用户创建成功：</h3>
<img alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0016.jpg" border="0" /><br />
<br />
<h3>6）新用户登录测试：</h3>
<p>输入新用户的&#8220;用户名/口令&#8221;：</p>
<p><img height="292" alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0017.jpg" width="441" border="0" /><br />
新用户&#8220;testcamds&#8221;成功登陆：</p>
<img alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0018.jpg" border="0" /><br />
<h2>6、导入导出数据库</h2>
先运行cmd命令，进入命令行模式，转到下面的目录：D:"oracle"product"10.2.0"db_1"BIN【该目录下有exp.exe文件】<br />
<h3>1）导入</h3>
<p>命令语法：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">imp&nbsp;userid</span> <span style="color: #808080">/</span> <span style="color: #000000">pwd</span> <span style="color: #008000">@sid</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">file</span> <span style="color: #808080">=</span> <span style="color: #000000">path</span> <span style="color: #808080">/</span> <span style="color: #0000ff">file</span> <span style="color: #000000">&nbsp;fromuser</span> <span style="color: #808080">=</span> <span style="color: #000000">testcamds&nbsp;touser</span> <span style="color: #808080">=</span> <span style="color: #000000">userid&nbsp;</span> </div>
<p>命令实例：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;imp&nbsp;testcamds</span> <span style="color: #808080">/</span> <span style="font-weight: bold; color: #800000">123</span> <span style="color: #008000">@camds</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">file</span> <span style="color: #808080">=</span> <span style="color: #000000">c:"testcamds&nbsp;fromuser</span> <span style="color: #808080">=</span> <span style="color: #000000">testcamds&nbsp;touser</span> <span style="color: #808080">=</span> <span style="color: #000000">testcamds&nbsp;</span> </div>
<p>导入结果：</p>
<img alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0019.jpg" border="0" /><br />
<br />
<h3>2）导出：</h3>
<p>命令语法：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #ff00ff">exp</span> <span style="color: #000000">&nbsp;userid</span> <span style="color: #808080">/</span> <span style="color: #000000">pwd</span> <span style="color: #008000">@sid</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">file</span> <span style="color: #808080">=</span> <span style="color: #000000">path</span> <span style="color: #808080">/</span> <span style="color: #0000ff">file</span> <span style="color: #000000">&nbsp;owner</span> <span style="color: #808080">=</span> <span style="color: #000000">userid&nbsp;&nbsp;</span> </div>
<p>命令实例：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #ff00ff">exp</span> <span style="color: #000000">&nbsp;testcamds</span> <span style="color: #808080">/</span> <span style="font-weight: bold; color: #800000">123</span> <span style="color: #008000">@camdsora</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">file</span> <span style="color: #808080">=</span> <span style="color: #000000">c:"testcamds&nbsp;owner</span> <span style="color: #808080">=</span> <span style="color: #000000">testcamds&nbsp;</span> </div>
<p>&nbsp;导入结果：</p>
<p>&nbsp;<img alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/20091018_oracle/snap0020.jpg" border="0" /></p>
<img src ="http://www.blogjava.net/coderdream/aggbug/298760.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2009-10-18 20:13 <a href="http://www.blogjava.net/coderdream/archive/2009/10/18/298760.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用代理，下载MyEclipse blue 7.1 </title><link>http://www.blogjava.net/coderdream/archive/2009/03/16/260103.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Mon, 16 Mar 2009 14:04:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2009/03/16/260103.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/260103.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2009/03/16/260103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/260103.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/260103.html</trackback:ping><description><![CDATA[最近，myeclipse 发布了最新的7.1版，其中blue版提供了对RAD 6.X的支持：
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;本版本的最引人注目之处莫过于对WSAD5.</span><span style="color: #000000;">1</span><span style="color: #000000;">、RAD&nbsp;</span><span style="color: #000000;">6</span><span style="color: #000000;">.X和7.X项目的加强支持，&nbsp;&nbsp;包括促进WSAD</span><span style="color: #000000;">/</span><span style="color: #000000;">RAD用户在MyEclipse&nbsp;Blue&nbsp;和RAD环境下提高项目质量，&nbsp;.&nbsp;全面有效执行任务的特性。此外，那些希望能将自己的项目完全移植到&nbsp;&nbsp;MyEclipse&nbsp;Blue&nbsp;版本的朋友们，可以通过使用MyEclipse&nbsp;Blue&nbsp;</span><span style="color: #000000;">7</span><span style="color: #000000;">.1中的简单向导来实现了。&nbsp;同时，新项目也能够完全支持已有的开发和服务器工具。&nbsp; <br />
</span></div>
<p>&nbsp;</p>
<p>下载地址为：</p>
<p>A：普通版：</p>
<p>http://downloads.myeclipseide.com/downloads/products/eworkbench/7.0/myeclipse-7.1-win32.exe</p>
<p>B：Blue版</p>
<p>http://downloads4.myeclipseide.com/downloads/products/eworkbench/7.0-Blue/myeclipse-blue-7.1-win32.exe</p>
<p>&nbsp;</p>
<p>其中普通版可以直接用迅雷下载，但是blue却连不上。</p>
<p>&nbsp;</p>
<p>尝试了多种方式，终于找到了下载方法，不过速度很慢，而且很不稳定：</p>
<p>使用的软件</p>
<p>1、OperaTor-2.5</p>
<p>这是一个附带代理的浏览器软件；</p>
<p>2、eMule V1.1.3</p>
<p>常用的电驴软件；</p>
<p>&nbsp;</p>
<p>下面我们来看看如何下载：</p>
<p>【步骤1】：打开OperaTor，程序打开后，会发现托盘区有一个蓝色图标，上面有一个字母&#8220;P"；</p>
<p>【步骤2】：将鼠标移到该图标，点击右键，依次选择【Edit】-》【Main configuration】</p>
<p><br />
<img src="http://coderdream.javaeye.com/upload/attachment/84808/db3fd97f-2c0d-393c-94e4-2c422aaf768b.gif" alt="" style="border: 1px solid black;" /></p>
<p>【步骤3】：在打开的config.txt文件中，我们可以看到，本地代理的端口为：9050，</p>
<p><br />
<img src="http://coderdream.javaeye.com/upload/attachment/84812/96fad16e-4aa0-3640-b46f-2f3f5699b02e.jpg" alt="" /></p>
<p>【步骤4】：设置电驴的代理服务器，这里的服务器类型选&#8221;Socks 4a&#8220;：</p>
<p><br />
<img src="http://coderdream.javaeye.com/upload/attachment/84818/a9c2b483-804b-32e4-80b7-40ab07fd65f0.jpg" alt="" /></p>
<p>【步骤5】：最后，点击电驴的&#8221;新建&#8220;按钮，将&#8221;blue版&#8220;的地址拷贝过来就可以下载了：</p>
<p><br />
<img class="magplus" title="点击查看原始大小图片" src="http://coderdream.javaeye.com/upload/attachment/84816/861b1341-b09f-32b8-95ef-f4eaa3727d6d.jpg" alt="" width="700" height="519" /></p>
<p><span style="font-size: medium;"><strong><span style="color: #ff6600;">不过通过代理方式下载的速度很慢，有时候还会断线，这时候只需要重新打开上面软件就可以了。</span>
</strong>
</span></p>
<img src ="http://www.blogjava.net/coderdream/aggbug/260103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2009-03-16 22:04 <a href="http://www.blogjava.net/coderdream/archive/2009/03/16/260103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dom4j 实践</title><link>http://www.blogjava.net/coderdream/archive/2008/08/20/223259.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Wed, 20 Aug 2008 07:14:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2008/08/20/223259.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/223259.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2008/08/20/223259.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/223259.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/223259.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 需求：对XML中的特定内容进行排序：原始XML：&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;&lt;hostgateway&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;header&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/coderdream/archive/2008/08/20/223259.html'>阅读全文</a><img src ="http://www.blogjava.net/coderdream/aggbug/223259.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2008-08-20 15:14 <a href="http://www.blogjava.net/coderdream/archive/2008/08/20/223259.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Comparator 和 Comparable 应用</title><link>http://www.blogjava.net/coderdream/archive/2008/08/20/223200.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Wed, 20 Aug 2008 03:37:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2008/08/20/223200.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/223200.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2008/08/20/223200.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/223200.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/223200.html</trackback:ping><description><![CDATA[Comparable &amp; Comparator 都是用来实现集合中的排序的，只是 Comparable 是在集合内部定义的方法实现的排序，Comparator 是在集合外部实现的排序，所以，如想实现排序，就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。<br />
<p><strong>一、Comparator</strong></p>
<p>强行对某个对象collection进行整体排序的比较函数，可以将Comparator传递给Collections.sort或Arrays.sort。</p>
<p>接口方法：<br />
</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,0)">&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)"><br />
&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@return</span><span style="color: rgb(0,128,0)">&nbsp;o1小于、等于或大于o2，分别返回负整数、零或正整数。<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;compare(Object&nbsp;o1,&nbsp;Object&nbsp;o2);</span></div>
<br />
<br />
<p><strong>二、Comparable</strong></p>
<p>强行对实现它的每个类的对象进行整体排序，实现此接口的对象列表（和数组）可以通过Collections.sort或Arrays.sort进行自动排序。</p>
<p>接口方法：<br />
</p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,0)">&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)"><br />
&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128,128,128)">@return</span><span style="color: rgb(0,128,0)">&nbsp;该对象小于、等于或大于指定对象o，分别返回负整数、零或正整数。&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0,128,0)">*/</span><span style="color: rgb(0,0,0)"><br />
&nbsp;&nbsp;</span><span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)">&nbsp;compareTo(Object&nbsp;o);</span></div>
<br />
<strong>三、Comparator和Comparable的区别</strong><br />
一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的，这个类对象组成的集合就可以直接使用sort方法排序。<br />
Comparator可以看成一种算法的实现，将算法和数据分离，Comparator也可以在下面两种环境下使用：<br />
1、类的设计师没有考虑到比较问题而没有实现Comparable，可以通过Comparator来实现排序而不必改变对象本身<br />
2、可以使用多种排序标准，比如升序、降序等。<br />
<br />
完整代码：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.ArrayList;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Collections;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Comparator;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;<br />
<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SortObject&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortByComparable();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortByComparator();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;通过Comparable排序<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;sortByComparable()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Person(</span><span style="color: #000000">"</span><span style="color: #000000">Coder</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Person(</span><span style="color: #000000">"</span><span style="color: #000000">King</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">3</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Person(</span><span style="color: #000000">"</span><span style="color: #000000">Dream</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Person(</span><span style="color: #000000">"</span><span style="color: #000000">Baby</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">));<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">---&nbsp;Sort&nbsp;Before&nbsp;---</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printPerson(list);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collections.sort(list);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">---&nbsp;After&nbsp;Sorted&nbsp;&nbsp;---</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printPerson(list);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;通过Comparator排序<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;sortByComparator()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Person(</span><span style="color: #000000">"</span><span style="color: #000000">Coder</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Person(</span><span style="color: #000000">"</span><span style="color: #000000">King</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">3</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Person(</span><span style="color: #000000">"</span><span style="color: #000000">Dream</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Person(</span><span style="color: #000000">"</span><span style="color: #000000">Baby</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">));<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">---&nbsp;Sort&nbsp;Before&nbsp;---</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printPerson(list);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collections.sort(list,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;PersonComparator());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">---&nbsp;After&nbsp;Sorted&nbsp;&nbsp;---</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printPerson(list);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;打印List<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;list<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;printPerson(List&nbsp;list)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;size&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;list.size();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Person&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;size;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Person)&nbsp;list.get(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(p.getName()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;p.getId());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Person&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Comparable&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;id;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Person()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Person(String&nbsp;name,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;id)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getName()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setName(String&nbsp;name)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;getId()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setId(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;id)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;compareTo(Object&nbsp;o)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Person&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Person)&nbsp;o;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.getName().compareTo(p.getName());<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;PersonComparator&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Comparator&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;compare(Object&nbsp;o1,&nbsp;Object&nbsp;o2)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Person&nbsp;p1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Person)&nbsp;o1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Person&nbsp;p2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Person)&nbsp;o2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;p1.name.compareTo(p2.name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
输出结果：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">---&nbsp;Sort&nbsp;Before&nbsp;---<br />
Coder:1<br />
King:3<br />
Dream:2<br />
Baby:4<br />
---&nbsp;After&nbsp;Sorted&nbsp;&nbsp;---<br />
Baby:4<br />
Coder:1<br />
Dream:2<br />
King:3<br />
---&nbsp;Sort&nbsp;Before&nbsp;---<br />
Coder:1<br />
King:3<br />
Dream:2<br />
Baby:4<br />
---&nbsp;After&nbsp;Sorted&nbsp;&nbsp;---<br />
Baby:4<br />
Coder:1<br />
Dream:2<br />
King:3<br />
</span></div>
<br />
<br />
参考：<br />
1、<a id="viewpost1_TitleUrl" href="http://www.blogjava.net/fastunit/archive/2008/04/08/191533.html">Comparator和Comparable在排序中的应用</a> <br />
2、&nbsp;<a href="http://blog.csdn.net/numen_wlm/archive/2007/08/22/1753802.aspx">java中对于复杂对象排序的模型及其实现 [转]</a>
<img src ="http://www.blogjava.net/coderdream/aggbug/223200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2008-08-20 11:37 <a href="http://www.blogjava.net/coderdream/archive/2008/08/20/223200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTML中的框架使用笔记</title><link>http://www.blogjava.net/coderdream/archive/2008/06/18/208818.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Wed, 18 Jun 2008 03:47:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2008/06/18/208818.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/208818.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2008/06/18/208818.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/208818.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/208818.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt"><strong style="color: #0000ff">效果：</strong></span><br />
左边链接(包括锚点)、右边显示<br />
<span style="font-size: 12pt"><strong style="color: #000000">文件清单1：</strong></span><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;------------------------------&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文件范例：index.html&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文件说明：框架集&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;------------------------------&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">META&nbsp;</span><span style="color: #ff0000">HTTP-EQUIV</span><span style="color: #0000ff">="CONTENT-TYPE"</span><span style="color: #ff0000">&nbsp;CONTENT</span><span style="color: #0000ff">="TEXT/HTML;CHARSET=UTF-8"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">TITLE</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">框架集</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">TITLE</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">FRAMESET&nbsp;</span><span style="color: #ff0000">COLS</span><span style="color: #0000ff">="30%,70%"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">FRAME&nbsp;</span><span style="color: #ff0000">SRC</span><span style="color: #0000ff">=menu.html&nbsp;</span><span style="color: #ff0000">Scrolling</span><span style="color: #0000ff">="No"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">FRAME&nbsp;</span><span style="color: #ff0000">SRC</span><span style="color: #0000ff">=1.html&nbsp;</span><span style="color: #ff0000">Name</span><span style="color: #0000ff">="right"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">FRAMESET</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;</span></div>
<strong style="font-size: 12pt; color: #0000ff">说明：</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;1、&lt;meta&gt;标签放在&lt;title&gt;之前可以让IE自动选择字符集，如UTF-8；<br />
&nbsp;&nbsp;&nbsp; 2、第二个frame的name为&#8220;right&#8221;，这个值会在menu.html中用到；<br />
<br />
<strong style="color: #000000">文件清单2：</strong><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;------------------------------&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;文件范例：menu.html&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文件说明：左侧框架&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;------------------------------&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">META&nbsp;</span><span style="color: #ff0000">HTTP-EQUIV</span><span style="color: #0000ff">="CONTENT-TYPE"</span><span style="color: #ff0000">&nbsp;CONTENT</span><span style="color: #0000ff">="TEXT/HTML;CHARSET=UTF-8"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">TITLE</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">左侧框架</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">TITLE</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BODY</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">A&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="1.HTML"</span><span style="color: #ff0000">&nbsp;Target</span><span style="color: #0000ff">="right"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">《商业周刊》:iPhone2.0带来的鲶鱼效应</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">A</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">P</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">A&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="1.HTML#a1"</span><span style="color: #ff0000">&nbsp;Target</span><span style="color: #0000ff">="right"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">无线运营商的日子更不好过</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">A</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">P</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">A&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="1.HTML#a2"</span><span style="color: #ff0000">&nbsp;Target</span><span style="color: #0000ff">="right"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">手机制造厂商们将更烦恼</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">A</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">P</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">A&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="1.HTML#a3"</span><span style="color: #ff0000">&nbsp;Target</span><span style="color: #0000ff">="right"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">iPhone带来的冲击会持续多久?</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">A</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">P</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">A&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="2.HTML"</span><span style="color: #ff0000">&nbsp;Target</span><span style="color: #0000ff">="right"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Fireworks&nbsp;MX</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">A</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">P</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">A&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="3.HTML"</span><span style="color: #ff0000">&nbsp;Target</span><span style="color: #0000ff">="right"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Flash&nbsp;MX</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">A</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">P</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">BODY</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;</span></div>
<strong style="color: #0000ff">说明：<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;1、注意，这里&lt;A&gt;标签的target都为index.html中定义的"right"<br />
<br />
<strong>文件清单3：</strong><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;------------------------------&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;文件范例：1.html&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文件说明：右侧框架一&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;------------------------------&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">META&nbsp;</span><span style="color: #ff0000">HTTP-EQUIV</span><span style="color: #0000ff">="CONTENT-TYPE"</span><span style="color: #ff0000">&nbsp;CONTENT</span><span style="color: #0000ff">="TEXT/HTML;CHARSET=UTF-8"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">TITLE</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">右侧框架一</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">TITLE</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Style&nbsp;</span><span style="color: #ff0000">Type</span><span style="color: #0000ff">="text/css"</span><span style="color: #0000ff">&gt;</span><span style="color: #800000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.abc&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">{</span><span style="color: #ff0000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-weight</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">&nbsp;bold</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #ff0000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font-size</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #0000ff; background-color: #f5f5f5">&nbsp;18px</span><span style="color: #000000; background-color: #f5f5f5">;</span><span style="color: #ff0000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">}</span><span style="color: #800000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Style</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BODY</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">H1</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">A&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=aTitle</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">《商业周刊》:iPhone2.0带来的鲶鱼效应</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">A</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">H1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
ugmbbc发布于&nbsp;2008-06-17&nbsp;08:26:20|2998&nbsp;次阅读&nbsp;字体：大&nbsp;小&nbsp;打印预览</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;<br />
　　北京时间6月16日,《商业周刊》发表评论文章分析了iPhone2.0对无线运营商和手机制造商们带来的冲击,以下为其全文:<br />
当苹果准备凭着3G版iPhone再次吹响战斗号角的时候,也是手机制造商和无线运营商们更加头疼的时候.苹果在手机市场中可谓旗开得胜,在iPhone&nbsp;入市的第一年,苹果就从竞争对手RIM公司中抢过不少市场份额,而AT</span><span style="color: #ff0000">&amp;T</span><span style="color: #000000">作为&nbsp;iPhone唯一授权的运营商,也从其竞争对手Alltel和T-Mobile中吸引了不少用户.可以想象,一个更便宜、速度更快、功能更全的&nbsp;iPhone将带来什么样的冲击.</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
　　将在7月面市的新版iPhone,不仅售价不到200美元、升级到更快的网络,而且新增了很多吸引普通消费者以及商业用户的功能.<br />
<br />
　　</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">A&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=a1</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">p&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">=abc</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">　　无线运营商的日子更不好过</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">A</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
　　据业内人士说,为了对付iPhone带来的冲击,无线服务运营商们不得不提高对手机的补贴、提高营销预算并降低一些服务的价格,所有这一切意味着利润空间的缩减.面对iPhone的冲击,本来就已经处在政府监管日益增加以及直面Google竞争的无线运营商们的日子更不好过了.</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
　　在过去的一年里,美国的无线运营商们已经在手机津贴上展开激烈竞争,通过增加对手机的补贴来获得长期无线服务合同.但现在AT</span><span style="color: #ff0000">&amp;T</span><span style="color: #000000">以&nbsp;iPhone为诱惑来吸引用户,对别的运营商来说,必须采取相应的措施来吸引用户,他们可能引进类iPhone的手机.但"大多数人要的是iPhone,就像他们喜欢iPod而不是其他MP3播放器一样",东北大学营销系教授Gloria&nbsp;Barczak说到,"人们要的是真正的iPhone".因此,要想让用户被吸引,必须得有别的优势,比如价格优势等.</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
　　为了留住高端用户,运营商们需要加大业务推广的力度.据广告顾问公司TNS媒体情报的数据,运营商Verizon无线今年第一季度的广告支出增加了30%.</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
　　Sprint&nbsp;Nextel同期的广告开支下降20%,主要是由于自身的财务问题,当看到用户不断流失的时候,Sprint&nbsp;Nextel应该会加大广告的投入."他们必须拿出能对抗iPhone诱惑的方案来,尽量发挥自己的长处",顾问公司TMNG的CEO&nbsp;Rich&nbsp;Nespola说到.</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
　　另一种留住用户的方式是降低服务的价格.事实上,这是一个有效对付AT</span><span style="color: #ff0000">&amp;T</span><span style="color: #000000">的办法.AT</span><span style="color: #ff0000">&amp;T</span><span style="color: #000000">对提供iPhone的用户增加了服务的价格,以弥补高额的津贴费用."AT</span><span style="color: #ff0000">&amp;T</span><span style="color: #000000">的对手们将在今年下半年继续加强价格优势,可能会有30%到40%的下降.当人们因为高油价开支增多的情况下,每月在无线服务上节省50美元也是很有吸引力的",Pali研究所的分析师Walter&nbsp;Piecyk说到,"因此,无线运营商的利润将从目前的40%下滑到30%".<br />
<br />
　　</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">p&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">=abc</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">A&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=a2</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">　　手机制造厂商们将更烦恼</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">A</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
　　手机制造厂商们也正在因为iPhone而大伤脑筋,尽管现在他们正受益于两位数增长的智能手机市场.当运营商们因iPhone而必须提高补贴的时候,他们会将压力转加到手机制造厂商头上,进而压低手机价格.何况,如果iPhone真像分析师们预期那样大卖的话,其他手机厂商的市场份额也会受到很大侵蚀.很久没推出拳头产品的摩托罗拉可能受创最重,三星、LG甚至诺基亚也会遭受冲击,NPD集团的主任分析师Ross&nbsp;Rubin说到,"高端、时尚机型将受冲击最大".</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
　　还有,为了赶上iPhone的技术水平和图形表现能力,手机制造厂商们将不得不提高他们的软件研发成本.去年售出300万台触摸手机的&nbsp;HTC,已经开发了一种特殊的3D菜单,该菜单表现力强劲,把通讯录做得就像在实际的纸制通讯录中翻找一样."我们希望能把用户的触摸体验提升到一个新的水平",HTC&nbsp;首席营销官的John&nbsp;Wang说到.</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
　　作为世界上最大手机制造商的诺基亚,在Ovi上投了大量资金,希望为它的智能手机建立一个集地图、游戏和照片共享于一身的Web服务平台,这次在iPhone的刺激下也在加紧推出新服务."我们将继续推出新服务",诺基亚美洲区副总裁Bill&nbsp;Plummer说到.<br />
<br />
　　</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">p&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">=abc</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">A&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=a3</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">　　iPhone带来的冲击会持续多久?</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">A</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">p</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
　　iPhone带来的冲击将会持续多久?这个很难说.一个重量级手机的销售要达到顶峰需要几年的时间.摩托罗拉传奇的RAZR系列手机在2004年推出,直到2007年一季度才达到销售的顶峰,据NPD的数据,当时RAZR系列手机销售占全美手机销售的12%.</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
　　虽然不好说那些别的智能手机和类iPhone的手机将会如何发展,但是"毕竟,重要的是,它们不是iPhone",Jupiter研究所分析师Neil&nbsp;Strother说到,"这不是在苹果堆里挑苹果".</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">BR</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">BODY</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;</span></div>
<br />
<strong>文件清单4：</strong><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;------------------------------&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;文件范例：2.html&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文件说明：右侧框架二&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;------------------------------&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">TITLE</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">右侧框架二</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">TITLE</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">META&nbsp;</span><span style="color: #ff0000">HTTP-EQUIV</span><span style="color: #0000ff">="CONTENT-TYPE"</span><span style="color: #ff0000">&nbsp;CONTENT</span><span style="color: #0000ff">="TEXT/HTML;CHARSET=UTF-8"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BODY</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">H1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Fireworks&nbsp;MX</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">H1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Fireworks&nbsp;MX作为网页图像设计软件的代表，在继承了前期版本图形绘制、页面特效功能的同时，大大地发展了位图图像方面的处理功能，这无疑使这个软件有了向Photoshop挑战的更多资本，而其在网页设计方面的诸多应用，又无任何软件可与之媲美。与Dreamweaver&nbsp;MX的整合使其在专业网站图像设计过程中，扮演着不可或缺的角色。<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">BODY</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;</span></div>
<br />
<strong>文件清单5：<br />
</strong>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;------------------------------&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;文件范例：3.html&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文件说明：右侧框架三&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;------------------------------&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">TITLE</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">右侧框架三</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">TITLE</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">META&nbsp;</span><span style="color: #ff0000">HTTP-EQUIV</span><span style="color: #0000ff">="CONTENT-TYPE"</span><span style="color: #ff0000">&nbsp;CONTENT</span><span style="color: #0000ff">="TEXT/HTML;CHARSET=UTF-8"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">HEAD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">BODY</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">H1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Flash&nbsp;MX</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">H1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
Flash&nbsp;MX作为网页矢量交互动画软件的代表，提供了图形绘制、动画制作和交互三大功能。掌握了这个软件的核心，也就有能力在网上冲浪的同时，充当一把闪客的角色。越来越多的个人、商业网站采用Flash技术制作广告Banner、动画片头、MTV、交互游戏，其广泛的应用为Flash的学习者提供了广阔的发展平台，学习Flash&nbsp;MX软件更是一个具有诱惑力的过程。<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">BODY</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">HTML</span><span style="color: #0000ff">&gt;</span></div>
<br />
<a href="/Files/coderdream/frameset.rar">源代码</a> 
<img src ="http://www.blogjava.net/coderdream/aggbug/208818.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2008-06-18 11:47 <a href="http://www.blogjava.net/coderdream/archive/2008/06/18/208818.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Eclipse中设置Jar文件与SourceCode的关联</title><link>http://www.blogjava.net/coderdream/archive/2008/05/29/203839.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Thu, 29 May 2008 06:57:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2008/05/29/203839.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/203839.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2008/05/29/203839.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/203839.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/203839.html</trackback:ping><description><![CDATA[我们在开发的过程中，调试的时候经常要进入某些包，如果没有将这些包与对应的源文件文件夹或zip包对应，就会提示&#8220;Source not found&#8221;，但是现在很多jar文件都会有相应的源文件，如Struts、Spring等等。而且JavaEE的很多源文件可以通过Tomcat的源文件找到，我们把它打成zip包，注意要和jar文件夹对应，然后设置一下，以后新建Web Project的时候，就可以很方便的查看servlet文件夹下面的源代码了。<br />
<br />
这是javaee.jar的设置画面，其他Struts等等设置类似。<br />
<img height="544" alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/Java/080529/Java_0129.gif" width="662" border="0" />
<img src ="http://www.blogjava.net/coderdream/aggbug/203839.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2008-05-29 14:57 <a href="http://www.blogjava.net/coderdream/archive/2008/05/29/203839.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中为面板（JPanel）添加标题</title><link>http://www.blogjava.net/coderdream/archive/2008/04/29/197296.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Tue, 29 Apr 2008 08:16:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2008/04/29/197296.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/197296.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2008/04/29/197296.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/197296.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/197296.html</trackback:ping><description><![CDATA[<span style="font-size: 18pt; color: #0000ff"><strong>需求：用实线把各个面板圈起来，然后把面板的名字写在圈圈的左上角。<br />
</strong></span><br />
原始画面：<br />
<img height="364" alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/Java/080429/Java_0137.gif" width="330" border="1" /><br />
<br />
由于原来的程序使用的是AWT中的Panel，而这个控件我们没有设置titleBorder的方法。<br />
现在将更新为Swing中的JPanel面板，代码分别为：<br />
旧代码：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Panel&nbsp;pRoboCtrl</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Panel();<br />
&nbsp;&nbsp;&nbsp;&nbsp;pRoboCtrl.setLayout(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GridLayout(</span><span style="color: #000000">5</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Robot控制面板的第一排，面板的标题</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Panel&nbsp;pR1</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Panel();&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pR1.setLayout(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GridLayout(</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">3</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Row&nbsp;One</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;pR1.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Label(</span><span style="color: #000000">"</span><span style="color: #000000">Robot&nbsp;Control</span><span style="color: #000000">"</span><span style="color: #000000">,Label.CENTER));</span></div>
新代码：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;JPanel&nbsp;pRoboCtrl</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JPanel();<br />
&nbsp;&nbsp;&nbsp;&nbsp;pRoboCtrl.setLayout(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GridLayout(</span><span style="color: #000000">4</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;Border&nbsp;titleBorder1</span><span style="color: #000000">=</span><span style="color: #000000">BorderFactory.createTitledBorder(</span><span style="color: #000000">"</span><span style="color: #000000">Robot&nbsp;Control</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;pRoboCtrl.setBorder(titleBorder1);&nbsp;&nbsp;&nbsp;</span></div>
原来的处理方式是将一个Label放到Panel中，然后将这个Panel放到外层的Panel中，新方式是将外层Panel定义成JPanel，然后设置Border的值为BorderFactory产生的一个实例。<br />
<br />
<img height="512" alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/Java/080429/Java_0135.gif" width="342" border="1" /><br />
<br />
解决这个问题后，新问题又来了，两个JPanel中的内容不一样，上面多，下面少，但是现在面板却是一样大，要改成面板高度自动适应。<br />
其实这只需要修改一行代码就可以了，代码如下：<br />
旧代码：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">CP.setLayout(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GridLayout(</span><span style="color: #000000">3</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000">));&nbsp;&nbsp;</span></div>
新代码：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">CP.setLayout(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BoxLayout(CP,&nbsp;BoxLayout.Y_AXIS));&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;沿垂直方向布置组件</span></div>
旧代码的处理方式是网格布局，新代码的方式是用BoxLayout布局管理器，它会按要求垂直或水平分布。<br />
<img height="436" alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/Java/080429/Java_0136.gif" width="352" border="1" /><br />
以下代码创建了一个JPanel容器，它采用垂直 BoxLayout，在这个容器中包含两个Button，这两个Button沿垂直方向分布，并且保持像素为 5 的固定垂直间隔。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;JPanel&nbsp;panel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JPanel();<br />
&nbsp;&nbsp;&nbsp;&nbsp;panel.setLayout(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BoxLayout(panel,&nbsp;BoxLayout.Y_AXIS));</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;沿垂直方向布置组件</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;panel.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JButton(</span><span style="color: #000000">"</span><span style="color: #000000">Button1</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;panel.add(Box.createVerticalStrut(</span><span style="color: #000000">5</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;panel.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JButton(</span><span style="color: #000000">"</span><span style="color: #000000">Button2</span><span style="color: #000000">"</span><span style="color: #000000">));</span></div>
<br />
源代码：<a href="/Files/coderdream/WebRobot.rar">下载</a>
<img src ="http://www.blogjava.net/coderdream/aggbug/197296.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2008-04-29 16:16 <a href="http://www.blogjava.net/coderdream/archive/2008/04/29/197296.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Quartz学习笔记</title><link>http://www.blogjava.net/coderdream/archive/2008/04/15/193175.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Tue, 15 Apr 2008 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2008/04/15/193175.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/193175.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2008/04/15/193175.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/193175.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/193175.html</trackback:ping><description><![CDATA[1、下载<br />
http://www.opensymphony.com/quartz/download.action<br />
<a href="https://quartz.dev.java.net/files/documents/1267/43545/quartz-1.6.0.zip">https://quartz.dev.java.net/files/documents/1267/43545/quartz-1.6.0.zip</a><br />
<br />
2、<strong><a href="http://tech.ccidnet.com/art/1112/20051122/377733_1.html"><strong>详细讲解Quartz如何从入门到精通</strong></a></strong><br />
3、<a href="http://www.ibm.com/developerworks/cn/java/j-quartz/index.html">用 Quartz 进行作业调度</a>
<img src ="http://www.blogjava.net/coderdream/aggbug/193175.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2008-04-15 17:46 <a href="http://www.blogjava.net/coderdream/archive/2008/04/15/193175.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 正则表达式（六）</title><link>http://www.blogjava.net/coderdream/archive/2008/02/29/182685.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Fri, 29 Feb 2008 01:49:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2008/02/29/182685.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/182685.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2008/02/29/182685.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/182685.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/182685.html</trackback:ping><description><![CDATA[<p>Java程序员：一刻钟精通正则表达式 </p>
<p><br />
　　想必很多人都对正则表达式都头疼。今天，我以我的认识，加上网上一些文章，希望用常人都可以理解的表达方式来和大家分享学习经验。</p>
<p>　　开篇，还是得说说 ^ 和 $ 他们是分别用来匹配字符串的开始和结束，以下分别举例说明：</p>
<p>　　"^The"： 开头一定要有"The"字符串；</p>
<p>　　"of despair$"： 结尾一定要有"of despair" 的字符串；</p>
<p>　　那么，</p>
<p>　　"^abc$"： 就是要求以abc开头和以abc结尾的字符串，实际上是只有abc匹配。</p>
<p>　　"notice"： 匹配包含notice的字符串。</p>
<p>　　你可以看见如果你没有用我们提到的两个字符（最后一个例子），就是说 模式（正则表达式） 可以出现在被检验字符串的任何地方，你没有把他锁定到两边。</p>
<p>　　接着，说说 '*'， '+'，和 '？'，</p>
<p>　　他们用来表示一个字符可以出现的次数或者顺序。 他们分别表示：</p>
<p>　　"zero or more"相当于{0，}，</p>
<p>　　"one or more"相当于{1，}，</p>
<p>　　"zero or one."相当于{0，1}， 这里是一些例子：</p>
<p>　　"ab*"： 和ab{0，}同义，匹配以a开头，后面可以接0个或者N个b组成的字符串（"a"， "ab"， "abbb"， 等）；</p>
<p>　　"ab+"： 和ab{1，}同义，同上条一样，但最少要有一个b存在 （"ab"， "abbb"， 等。）；</p>
<p>　　"ab？"：和ab{0，1}同义，可以没有或者只有一个b；</p>
<p>　　"a？b+$"： 匹配以一个或者0个a再加上一个以上的b结尾的字符串。</p>
<p>　　要点， '*'， '+'，和 '？'只管它前面那个字符。</p>
<p>　　你也可以在大括号里面限制字符出现的个数，比如</p>
<p>　　"ab{2}"： 要求a后面一定要跟两个b（一个也不能少）（"abb"）；</p>
<p>　　"ab{2，}"： 要求a后面一定要有两个或者两个以上b（如"abb"， "abbbb"， 等。）；</p>
<p>　　"ab{3，5}"： 要求a后面可以有2-5个b（"abbb"， "abbbb"， or "abbbbb"）。</p>
<p>　　现在我们把一定几个字符放到小括号里，比如：</p>
<p>　　"a（bc）*"： 匹配 a 后面跟0个或者一个"bc"；</p>
<p>　　"a（bc）{1，5}"： 一个到5个 "bc."</p>
<p>　　还有一个字符 '│'， 相当于OR 操作：</p>
<p>　　"hi│hello"： 匹配含有"hi" 或者 "hello" 的 字符串；</p>
<p>　　"（b│cd）ef"： 匹配含有 "bef" 或者 "cdef"的字符串；</p>
<p>　　"（a│b）*c"： 匹配含有这样多个（包括0个）a或b，后面跟一个c的字符串；</p>
<p>　　一个点（'.'）可以代表所有的单一字符，不包括"\n"</p>
<p>　　如果，要匹配包括"\n"在内的所有单个字符，怎么办？</p>
<p>　　对了，用'[\n.]'这种模式。</p>
<p>　　"a.[0-9]"： 一个a加一个字符再加一个0到9的数字</p>
<p>　　"^.{3}$"： 三个任意字符结尾 .</p>
<p>　　中括号括住的内容只匹配一个单一的字符</p>
<p>　　"[ab]"： 匹配单个的 a 或者 b （ 和 "a│b" 一样）；</p>
<p>　　"[a-d]"： 匹配'a' 到'd'的单个字符 （和"a│b│c│d" 还有 "[abcd]"效果一样）； 一般我们都用[a-zA-Z]来指定字符为一个大小写英文</p>
<p>　　"^[a-zA-Z]"： 匹配以大小写字母开头的字符串</p>
<p>　　"[0-9]%"： 匹配含有 形如 x% 的字符串</p>
<p>　　"，[a-zA-Z0-9]$"： 匹配以逗号再加一个数字或字母结尾的字符串</p>
<p>　　你也可以把你不想要得字符列在中括号里，你只需要在总括号里面使用'^' 作为开头 "%[^a-zA-Z]%" 匹配含有两个百分号里面有一个非字母的字符串。</p>
<p>　　要点：^用在中括号开头的时候，就表示排除括号里的字符。为了PHP能够解释，你必须在这些字符面前后加''，并且将一些字符转义。</p>
<p>　　不要忘记在中括号里面的字符是这条规路的例外？在中括号里面， 所有的特殊字符，包括（''）， 都将失去他们的特殊性质 "[*\+？{}.]"匹配含有这些字符的字符串。</p>
<p>　　还有，正如regx的手册告诉我们： "如果列表里含有 ']'， 最好把它作为列表里的第一个字符（可能跟在'^'后面）。 如果含有'-'， 最好把它放在最前面或者最后面， or 或者一个范围的第二个结束点[a-d-0-9]中间的&#8216;-&#8217;将有效。</p>
<p>　　看了上面的例子，你对{n，m}应该理解了吧。要注意的是，n和m都不能为负整数，而且n总是小于m. 这样，才能 最少匹配n次且最多匹配m次。 如"p{1，5}"将匹配 "pvpppppp"中的前五个p.</p>
<p>　　下面说说以\开头的</p>
<p>　　\b 书上说他是用来匹配一个单词边界，就是&#8230;&#8230;比如've\b'，可以匹配love里的ve而不匹配very里有ve</p>
<p>　　\B 正好和上面的\b相反。例子我就不举了</p>
<p>　　&#8230;&#8230;突然想起来&#8230;&#8230;可以到http://www.phpv.net/article.php/251 看看其它用\ 开头的语法</p>
<p>　　好，我们来做个应用：</p>
<p>　　如何构建一个模式来匹配 货币数量 的输入</p>
<p>　　构建一个匹配模式去检查输入的信息是否为一个表示money的数字。我们认为一个表示money的数量有四种方式： "10000.00" 和 "10，000.00"，或者没有小数部分， "10000" and "10，000". 现在让我们开始构建这个匹配模式：</p>
<p>　　^[1-9][0-9]*$</p>
<p>　　这是所变量必须以非0的数字开头。但这也意味着 单一的 "0" 也不能通过测试。 以下是解决的方法：</p>
<p>　　^（0│[1-9][0-9]*）$</p>
<p>　　"只有0和不以0开头的数字与之匹配"，我们也可以允许一个负号在数字之前：</p>
<p>　　^（0│-？[1-9][0-9]*）$</p>
<p>　　这就是： "0 或者 一个以0开头 且可能 有一个负号在前面的数字。" 好了，现在让我们别那么严谨，允许以0开头。现在让我们放弃 负号 ， 因为我们在表示钱币的时候并不需要用到。 我们现在指定 模式 用来匹配小数部分：</p>
<p>　　^[0-9]+（\.[0-9]+）？$</p>
<p>　　这暗示匹配的字符串必须最少以一个阿拉伯数字开头。 但是注意，在上面模式中 "10." 是不匹配的， 只有 "10" 和 "10.2" 才可以。 （你知道为什么吗）</p>
<p>　　^[0-9]+（\.[0-9]{2}）？$</p>
<p>　　我们上面指定小数点后面必须有两位小数。如果你认为这样太苛刻，你可以改成：</p>
<p>　　^[0-9]+（\.[0-9]{1，2}）？$</p>
<p>　　这将允许小数点后面有一到两个字符。 现在我们加上用来增加可读性的逗号（每隔三位）， 我们可以这样表示：</p>
<p>　　^[0-9]{1，3}（，[0-9]{3}）*（\.[0-9]{1，2}）？$</p>
<p>　　不要忘记 '+' 可以被 '*' 替代 如果你想允许空白字符串被输入话 （为什么？）。 也不要忘记反斜杆 &#8216;\&#8217; 在php字符串中可能会出现错误 （很普遍的错误）。</p>
<p>　　现在，我们已经可以确认字符串了， 我们现在把所有逗号都去掉 str_replace（"，"， ""， $money） 然后在把类型看成 double然后我们就可以通过他做数学计算了。</p>
<p>　　再来一个：</p>
<p>　　构造检查email的正则表达式</p>
<p>　　在一个完整的email地址中有三个部分：</p>
<p>　　1. 用户名 （在 '@' 左边的一切），</p>
<p>　　2.'@'，</p>
<p>　　3. 服务器名（就是剩下那部分）。</p>
<p>　　用户名可以含有大小写字母阿拉伯数字，句号 （'.'）， 减号（'-'）， and 下划线 （'_'）。 服务器名字也是符合这个规则，当然下划线除外。</p>
<p>　　现在， 用户名的开始和结束都不能是句点。 服务器也是这样。 还有你不能有两个连续的句点他们之间至少存在一个字符，好现在我们来看一下怎么为用户名写一个匹配模式：</p>
<p>　　^[_a-zA-Z0-9-]+$</p>
<p>　　现在还不能允许句号的存在。 我们把它加上：</p>
<p>　　^[_a-zA-Z0-9-]+（\.[_a-zA-Z0-9-]+）*$</p>
<p>　　上面的意思就是说： "以至少一个规范字符（除了。）开头，后面跟着0个或者多个以点开始的字符串。"</p>
<p>　　简单化一点， 我们可以用 eregi（）取代 ereg（）。eregi（）对大小写不敏感， 我们就不需要指定两个范围 "a-z" 和 "A-Z" ？ 只需要指定一个就可以了：</p>
<p>　　^[_a-z0-9-]+（\.[_a-z0-9-]+）*$</p>
<p>　　后面的服务器名字也是一样，但要去掉下划线：</p>
<p>　　^[a-z0-9-]+（\.[a-z0-9-]+）*$</p>
<p>　　好。 现在只需要用&#8220;@&#8221;把两部分连接：</p>
<p>　　^[_a-z0-9-]+（\.[_a-z0-9-]+）*@[a-z0-9-]+（\.[a-z0-9-]+）*$</p>
<p>　　这就是完整的email认证匹配模式了，只需要调用</p>
<p>　　eregi（&#8216;^[_a-z0-9-]+（\.[_a-z0-9-]+）*@[a-z0-9-]+（\.[a-z0-9-]+）*$ &#8217;，$eamil）</p>
<p>　　就可以得到是否为email了。</p>
<p>　　正则表达式的其他用法</p>
<p>　　提取字符串</p>
<p>　　ereg（） and eregi（） 有一个特性是允许用户通过正则表达式去提取字符串的一部分（具体用法你可以阅读手册）。 比如说，我们想从 path/URL 提取文件名 ？ 下面的代码就是你需要：</p>
<p>　　ereg（"（[^\\/]*）$"， $pathOrUrl， $regs）；</p>
<p>　　echo $regs[1]；</p>
<p>　　高级的代换</p>
<p>　　ereg_replace（） 和 eregi_replace（）也是非常有用的： 假如我们想把所有的间隔负号都替换成逗号：</p>
<p>　　ereg_replace（"[ \n\r\t]+"， "，"， trim（$str））；</p>
<p>　　最后，我把另一串检查EMAIL的正则表达式让看文章的你来分析一下。</p>
<p>　　"^[-！#$%&amp;\'*+\\./0-9=？A-Z^_`a-z{|}~]+'.'@'.'[-！#$%&amp;\'*+\\/0-9=？A-Z^_`a-z{|}~]+\.'.'[-！#$%&amp;\'*+\\./0-9=？A-Z^_`a-z{|}~]+$"</p>
<p>　　如果能方便的读懂，那这篇文章的目的就达到了。<br />
<br />
原文地址：<a href="http://java.chinaitlab.com/base/732793.html">http://java.chinaitlab.com/base/732793.html</a></p>
 <img src ="http://www.blogjava.net/coderdream/aggbug/182685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2008-02-29 09:49 <a href="http://www.blogjava.net/coderdream/archive/2008/02/29/182685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 正则表达式（七）</title><link>http://www.blogjava.net/coderdream/archive/2008/02/29/182837.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Fri, 29 Feb 2008 01:47:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2008/02/29/182837.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/182837.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2008/02/29/182837.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/182837.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/182837.html</trackback:ping><description><![CDATA[1、 <a href="http://www.regexlab.com/zh/regref.htm">揭开正则表达式的神秘面纱</a><br />
2、<a href="http://www.regexlab.com/zh/regtopic.htm">正则表达式话题 </a><br />
3、<a href="http://edu.yesky.com/edupxpt/115/2146615.shtml">如何使用Java自带的正则表达式</a><br />
4、<a href="http://hedong.3322.org/archives/000309.html">处理正则表达式的java包:regexp</a><br />
5、<a href="http://www.matrix.org.cn/thread.shtml?topicId=16385&amp;forumId=19">Java正则表达式技巧总结</a><br />
6、<span id="ArticleTitle1_ArticleTitle1_lblTitle"><a href="http://dev.csdn.net/article/85006.shtm"><span id="ArticleTitle1_ArticleTitle1_lblTitle">学点Java正则表达式</span></a></span><br />
7、<a href="http://www.pconline.com.cn/pcjob/ittest/java/js/10309/214042.html">在JAVA中使用正则表达式</a><br />
8、<a href="http://hi.baidu.com/edwardworld/blog/item/6e1eb18b8214067d9e2fb480.html">Java正则表达式(1)</a><br />
9、<a href="http://hi.baidu.com/edwardworld/blog/item/151c82456826f53d879473b4.html">java正则表达式; regular expression(2)<br />
</a>10、<a href="http://hi.baidu.com/dearfenix/blog/item/b6045c5c8682eb40fbf2c089.html">JAVA正则表达式(2)</a>
 <img src ="http://www.blogjava.net/coderdream/aggbug/182837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2008-02-29 09:47 <a href="http://www.blogjava.net/coderdream/archive/2008/02/29/182837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 正则表达式（五）</title><link>http://www.blogjava.net/coderdream/archive/2008/02/28/182669.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Thu, 28 Feb 2008 06:35:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2008/02/28/182669.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/182669.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2008/02/28/182669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/182669.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/182669.html</trackback:ping><description><![CDATA[<strong>JAVA&nbsp;正则表达式实现</strong><br />
<br />
<h3>&#167;1黑暗岁月</h3>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有一个String，如何查询其中是否有y和f字符？最黑暗的办法就是：<br />
程序1：我知道if、for语句和charAt()啊。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Test{<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String&nbsp;args[])&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">For&nbsp;my&nbsp;money,&nbsp;the&nbsp;important&nbsp;thing&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">about&nbsp;the&nbsp;meeting&nbsp;was&nbsp;bridge-building</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;x</span><span style="color: #000000">=</span><span style="color: #000000">'</span><span style="color: #000000">y</span><span style="color: #000000">'</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;y</span><span style="color: #000000">=</span><span style="color: #000000">'</span><span style="color: #000000">f</span><span style="color: #000000">'</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;result</span><span style="color: #000000">=</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">str.length();i</span><span style="color: #000000">++</span><span style="color: #000000">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;z</span><span style="color: #000000">=</span><span style="color: #000000">str.charAt(i);&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">System.out.println(z);</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(x</span><span style="color: #000000">==</span><span style="color: #000000">z</span><span style="color: #000000">||</span><span style="color: #000000">y</span><span style="color: #000000">==</span><span style="color: #000000">z)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result</span><span style="color: #000000">=</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;result</span><span style="color: #000000">=</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;好像很直观，但这种方式难以应付复杂的工作。如查询一段文字中，是否有is？是否有thing或ting等。这是一个讨厌的工作。<br />
<h3>&#167;2&nbsp;Java的java.util.regex包</h3>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;按照面向对象的思路，把希望查询的字符串如is、thing或ting封装成一个对象，以这个对象作为模板去匹配一段文字，就更加自然了。作为模板的那个东西就是下面要讨论的正则表达式。先不考虑那么复杂，看一个例子：<br />
程序2：不懂。先看看可以吧？<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.regex.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Regex1{<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String&nbsp;args[])&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">For&nbsp;my&nbsp;money,&nbsp;the&nbsp;important&nbsp;thing&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">about&nbsp;the&nbsp;meeting&nbsp;was&nbsp;bridge-building</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;regEx</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">a|f</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">表示a或f&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pattern&nbsp;p</span><span style="color: #000000">=</span><span style="color: #000000">Pattern.compile(regEx);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Matcher&nbsp;m</span><span style="color: #000000">=</span><span style="color: #000000">p.matcher(str);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;result</span><span style="color: #000000">=</span><span style="color: #000000">m.find();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果str匹配regEx，那么result为true，否则为flase。如果想在查找时忽略大小写，则可以写成：<br />
Pattern&nbsp;p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;虽然暂时不知道Pattern（模板、模式）和Matcher（匹配器）的细节，程序的感觉就比较爽，如果先查询is、后来又要查询thing或ting，我们只需要修改一下模板Pattern，而不是考虑if语句和for语句，或者通过charAt()。<br />
1、写一个特殊的字符串??正则表达式如a|f。<br />
2、将正则表达式编译成一个模板：p<br />
3、用模板p去匹配字符串str。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;思路清楚了，现在看Java是如何处理的（Java程序员直到JDK1.4才能使用这些类。<br />
<h3>&#167;3&nbsp;Pattern类与查找</h3>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;①public&nbsp;final&nbsp;class&nbsp;java.util.regex.Pattern是正则表达式编译后的表达法。下面的语句将创建一个Pattern对象并赋值给句柄p：Pattern&nbsp;p=Pattern.compile(regEx);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有趣的是，Pattern类是final类，而且它的构造器是private。也许有人告诉你一些设计模式的东西，或者你自己查有关资料。这里的结论是：Pattern类不能被继承，我们不能通过new创建Pattern类的对象。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因此在Pattern类中，提供了2个重载的静态方法，其返回值是Pattern对象（的引用）。如：<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;Pattern&nbsp;compile(String&nbsp;regex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;Pattern(regex,&nbsp;0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当然，我们可以声明Pattern类的句柄，如Pattern&nbsp;p=null；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;②p.matcher(str)表示以用模板p去生成一个字符串str的匹配器，它的返回值是一个Matcher类的引用，为什么要这个东西呢？按照自然的想法，返回一个boolean值不行吗？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们可以简单的使用如下方法：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;result=Pattern.compile(regEx).matcher(str).find();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;呵呵，其实是三个语句合并的无句柄方式。无句柄常常不是好方式。后面再学习Matcher类吧。先看看regEx??这个怪咚咚。<br />
<h3>&#167;4&nbsp;正则表达式之限定符</h3>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;正则表达式（Regular&nbsp;Expression）是一种生成字符串的字符串。晕吧。比如说，String&nbsp;regEx="me+";这里字符串me+能够生成的字符串是：me、mee、meee、meeeeeeeeee等等，一个正则表达式可能生成无穷的字符串，所以我们不可能（有必要吗？）输出正则表达式产生的所有东西。<br />
反过来考虑，对于字符串：me、mee、meee、meeeeeeeeee等等，我们能否有一种语言去描述它们呢？显然，正则表达式语言是这种语言，它是一些字符串的模式??简洁而深刻的描述。<br />
我们使用正则表达式，用于字符串查找、匹配、指定字符串替换、字符串分割等等目的。<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;生成字符串的字符串??正则表达式，真有些复杂，因为我们希望由普通字符（例如字符&nbsp;a&nbsp;到&nbsp;z）以及特殊字符（称为元字符）描述任意的字符串，而且要准确。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;先搞几个正则表达式例子：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;程序3：我们总用这个程序测试正则表达式。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.regex.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Regex1{<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String&nbsp;args[])&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">For&nbsp;my&nbsp;money,&nbsp;the&nbsp;important&nbsp;thing&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;regEx</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">ab*</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;result</span><span style="color: #000000">=</span><span style="color: #000000">Pattern.compile(regEx).matcher(str).find();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span><span style="color: #008000">//</span><span style="color: #008000">ture</span></div>
<br />
①"ab*"??能匹配a、ab、abb、abbb&#8230;&#8230;。所以，*表示前面字符可以有零次或多次。如果仅仅考虑查找，直接用"a"也一样。但想想替换的情况。&nbsp;问题regEx="abb*"结果如何？<br />
②"ab+"??能匹配ab、abb、abbb&#8230;&#8230;。等价于"abb*"。问题regEx="or+"结果如何？<br />
③"or?"??能匹配o和or。?&nbsp;表示前面字符可以有零次或一次。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这些限定符*、+、?方便地表示了其前面字符(子串)出现的次数（我们用{}来描述）：<br />
x*&nbsp;&nbsp;&nbsp;&nbsp;零次或多次&nbsp;&#8801;{0,}<br />
x+&nbsp;&nbsp;&nbsp;&nbsp;一次或多次&nbsp;&#8801;{1,}<br />
x?&nbsp;&nbsp;&nbsp;&nbsp;零次或一次&nbsp;&#8801;{0,1}<br />
x{n}&nbsp;&nbsp;&nbsp;&nbsp;n次（n&gt;0）<br />
x{n,m}&nbsp;&nbsp;&nbsp;&nbsp;最少n次至最多m次（0&lt;n&lt;m）<br />
x{n,}&nbsp;&nbsp;&nbsp;&nbsp;最少n次,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
现在我们知道了连续字符串的查找、匹配。下面的是一些练习题：<br />
①查找粗体字符串（不要求精确或要求精确匹配），写出其正则表达式：<br />
str&nbsp;&nbsp;&nbsp;&nbsp;regEX(不要求精确)&nbsp;&nbsp;&nbsp;&nbsp;regEX(要求精确)&nbsp;&nbsp;&nbsp;&nbsp;试一试<br />
abcffd&nbsp;&nbsp;&nbsp;&nbsp;b或bcff或bcf*或bc*或bc+&nbsp;&nbsp;&nbsp;&nbsp;bcff或bcf{2}&nbsp;&nbsp;&nbsp;&nbsp;bc{3}<br />
gooooogle&nbsp;&nbsp;&nbsp;&nbsp;o{1,}、o+&nbsp;&nbsp;&nbsp;&nbsp;o{5}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
banana&nbsp;&nbsp;&nbsp;&nbsp;(an)+&nbsp;&nbsp;&nbsp;&nbsp;(an){2}a、a(na)&nbsp;{2}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
②正则表达式匹配字符串，输出是什么？<br />
<h3>&#167;5替换（删除）、Matcher类</h3>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 现在我们可能厌烦了true/false，我们看看替换。如把book，google替换成bak（这个文件后缀名，在EditPlus中还行）、look或goooogle。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序4：字符串的替换。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.regex.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Regex1{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String&nbsp;args[])&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;regEx</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">a+</span><span style="color: #000000">"</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">表示一个或多个a</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">abbbaaa&nbsp;an&nbsp;banana&nbsp;hhaana</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pattern&nbsp;p</span><span style="color: #000000">=</span><span style="color: #000000">Pattern.compile(regEx);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Matcher&nbsp;m</span><span style="color: #000000">=</span><span style="color: #000000">p.matcher(str);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;s</span><span style="color: #000000">=</span><span style="color: #000000">m.replaceAll(</span><span style="color: #000000">"</span><span style="color: #000000">⊙⊙</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;("")&nbsp;删除</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}&nbsp;&nbsp;&nbsp;&nbsp;</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个程序与前面的程序的区别，在于使用了m.replaceAll(String)方法。看来Matcher类还有点用处。<br />
①&nbsp;&nbsp;Matcher是一个匹配器。可以把他看成一个人，一手拿着模子（Pattern类的对象），一手拿着一个字符序列（CharSequence），通过解释该模子而对字符序列进行匹配操作（match&nbsp;operations）。常常我们这样编程：&#8220;喂，模子p，你和字符串str一起创建一个匹配器对象&#8221;。即Matcher&nbsp;m=p.matcher(str);<br />
②&nbsp;&nbsp;m可以进行一些操作，如public&nbsp;String&nbsp;replaceAll(String&nbsp;replacement)，它以replacement替换所有匹配的字符串。<br />
<h3>&#167;6正则表达式之特殊字符</h3>
我们熟悉这样一个字符串"\n"&nbsp;如：System.out.print(s+"\nbbb");这是Java中常用的转移字符之一。其实转移字符就是一种正则表达式，它使用了特殊字符&nbsp;\&nbsp;。<br />
&nbsp;<br />
下面是正则表达式中常用的特殊字符：<br />
匹配次数符号&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;？&nbsp;&nbsp;&nbsp;&nbsp;{n}、{n,}、{n,m}<br />
&#8220;或&#8221;符号&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;程序2已经使用过了<br />
句点符号&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;句点符号匹配所有字符（一个），包括空格、Tab字符甚至换行符。<br />
方括号&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;]&nbsp;&nbsp;&nbsp;仅仅匹配方括号其中的字符)<br />
圆括号&nbsp;&nbsp;&nbsp;&nbsp;()&nbsp;&nbsp;&nbsp;&nbsp;分组，圆括号中的字符视为一个整体。<br />
连字符&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;表示一个范围。&nbsp;<br />
&#8220;否&#8221;符号&nbsp;&nbsp;&nbsp;&nbsp;^&nbsp;&nbsp;&nbsp;&nbsp;表示不希望被匹配的字符（排除）<br />
<br />
我们一下子学不了太多的东西，这不是正则表达式的全部内容和用法。但已经够我们忙活的了。我们用程序4&nbsp;验证。(⊙⊙表示替换的字符)<br />
①&nbsp;&nbsp;&nbsp;&nbsp;regEx为下列字符串时，能够表示什么？<br />
regEx&nbsp;&nbsp;&nbsp;&nbsp;匹配&nbsp;&nbsp;&nbsp;&nbsp;测试用str<br />
(a|b){2}&nbsp;&nbsp;&nbsp;&nbsp;aa、ab、bb、ba&nbsp;&nbsp;&nbsp;&nbsp;aabbfooaabfooabfoob<br />
a[abc]b&nbsp;&nbsp;&nbsp;&nbsp;aab、abb、acb&nbsp;&nbsp;&nbsp;&nbsp;3dfacb5ooyfo6abbfooaab<br />
.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;all&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;3dfac<br />
a.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aa、ax&#8230;&#8230;等等&nbsp;&nbsp;&nbsp;&nbsp;3dfacgg<br />
d[^j]a&nbsp;&nbsp;&nbsp;&nbsp;daa、d9a等等，除dja&nbsp;&nbsp;&nbsp;&nbsp;3dfacggdjad5a<br />
[d-g][ac]c&nbsp;&nbsp;&nbsp;&nbsp;dac、ecc、gac等&nbsp;&nbsp;&nbsp;&nbsp;3dfacggggccad5c<br />
[d-g].{2}c&nbsp;&nbsp;&nbsp;&nbsp;d⊙⊙c&#8230;&#8230;&nbsp;&nbsp;&nbsp;&nbsp;3dfacggggccad5c<br />
g{1,10}&nbsp;&nbsp;&nbsp;&nbsp;g、ggg&#8230;&#8230;&nbsp;&nbsp;&nbsp;&nbsp;3dfacggggccad5c<br />
[a|c][^a]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3dfacggggccad5c<br />
&nbsp;<br />
②&nbsp;&nbsp;&nbsp;&nbsp;下列字符串如何用regEx表示？<br />
测试用str&nbsp;&nbsp;&nbsp;&nbsp;匹配&nbsp;&nbsp;&nbsp;&nbsp;regEx<br />
aabbfoaoabfooafobob&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a⊙⊙b&nbsp;&nbsp;&nbsp;&nbsp;a..b<br />
aabbfoaaobfooafbob&nbsp;&nbsp;&nbsp;&nbsp;a⊙b、除aab&nbsp;&nbsp;&nbsp;&nbsp;a[^a]b、<br />
gooooooogle&nbsp;&nbsp;&nbsp;&nbsp;oooo&#8230;&#8230;变成oo&nbsp;&nbsp;&nbsp;&nbsp;o{2,20}<br />
一本书中的&#8220;tan&#8221;、&#8220;ten&#8221;、&#8220;tin&#8221;和&#8220;ton&#8221;&nbsp;&nbsp;&nbsp;&nbsp;t.n、t[aeio]n<br />
abcaccbcbaacabccaa&nbsp;&nbsp;&nbsp;&nbsp;删除ac、ca&nbsp;&nbsp;&nbsp;&nbsp;(ca)|(ac)<br />
abccbcbaabca&nbsp;&nbsp;&nbsp;&nbsp;再删除ab、ba&nbsp;&nbsp;&nbsp;&nbsp;结果ccbcca（如何与上面的合并）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
注：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、String&nbsp;str="一本书中的tan、ten、tin和ton";&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输出：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一本书中的⊙⊙、⊙⊙、⊙⊙和⊙⊙<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、String&nbsp;str="&nbsp;abcaccbcbaacabccaa&nbsp;";&nbsp;输出：ccbcca<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;程序5：if、for语句和charAt()，886。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.regex.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Regex1{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String&nbsp;args[])&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">abcaccbcbaacabccaa</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;regEx</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">(ac)|(ca)</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pattern&nbsp;p</span><span style="color: #000000">=</span><span style="color: #000000">Pattern.compile(regEx);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Matcher&nbsp;m</span><span style="color: #000000">=</span><span style="color: #000000">p.matcher(str);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;s</span><span style="color: #000000">=</span><span style="color: #000000">m.replaceAll(</span><span style="color: #000000">""</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">⊙⊙</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regEx</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">(ab)|(ba)</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="color: #000000">=</span><span style="color: #000000">Pattern.compile(regEx);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s</span><span style="color: #000000">=</span><span style="color: #000000">p.matcher(s).replaceAll(</span><span style="color: #000000">""</span><span style="color: #000000">);<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(s</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
<h3>&#167;7&nbsp;开始</h3>
好像我们知道了一些正则表达式与&nbsp;Java的知识，事实上，我们才刚刚开始。这里列出我们知道的东西，也说一点我们不知道的东西。<br />
① Java在JDK1.4引入了（java.util.regex包）以支持正则表达式，包中有两个类，分别是Pattern和Matcher。它们都有很多的方法，我们还不知道。String类中的split、matches方法等等也使用到了正则表达式。StringTokenizer是否没有用处了？<br />
② 正则表达式是一门语言。有许多正则表达式语法、选项和特殊字符，在Pattern.java源文件中大家可以查看。可能比想象中的要复杂。系统学习正则表达式的历史、语法、全部特殊字符（相当于Java中的关键字的地位），组合逻辑是下一步的事情。<br />
③ 正则表达式是文本处理的重要技术，在Perl、PHP、Python、JavaScript、Java、C＃中被广泛支持。被列为&#8220;保证你现在和未来不失业的十种关键技术&#8221;，呵呵，信不信由你  <img src ="http://www.blogjava.net/coderdream/aggbug/182669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2008-02-28 14:35 <a href="http://www.blogjava.net/coderdream/archive/2008/02/28/182669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 正则表达式（四）</title><link>http://www.blogjava.net/coderdream/archive/2008/02/28/182662.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Thu, 28 Feb 2008 05:41:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2008/02/28/182662.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/182662.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2008/02/28/182662.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/182662.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/182662.html</trackback:ping><description><![CDATA[JAVA&nbsp;正则表达式4种常用的功能<br />
<br />
　　正则表达式在字符串处理上有着强大的功能，sun在jdk1.4加入了对它的支持 <br />
<br />
　　下面简单的说下它的4种常用功能：<br />
　　<br />
　　<strong>查询：</strong><br />
　　<br />
以下是代码片段：<br />
String str="abc efg ABC"; <br />
<br />
String regEx="a|f"; //表示a或f <br />
<br />
Pattern p=Pattern.compile(regEx); <br />
<br />
Matcher m=p.matcher(str); <br />
<br />
boolean rs=m.find(); <br />
<br />
　　<br />
　　如果str中有regEx，那么rs为true，否则为flase。如果想在查找时忽略大小写，则可以写成Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);<br />
　　<br />
　　<strong>提取：</strong><br />
<br />
以下是代码片段：<br />
String regEx=".+\(.+)$"; <br />
<br />
String str="c:\dir1\dir2\name.txt"; <br />
<br />
Pattern p=Pattern.compile(regEx); <br />
<br />
Matcher m=p.matcher(str); <br />
<br />
boolean rs=m.find(); <br />
<br />
for(int i=1;i&lt;=m.groupCount();i++){ <br />
<br />
System.out.println(m.group(i)); <br />
<br />
} <br />
<br />
　　<br />
　　以上的执行结果为name.txt，提取的字符串储存在m.group(i)中，其中i最大值为m.groupCount();<br />
　　<br />
　　<strong>分割：<br />
</strong>　　<br />
以下是代码片段：<br />
String regEx="::"; <br />
<br />
Pattern p=Pattern.compile(regEx); <br />
<br />
String[] r=p.split("xd::abc::cde"); <br />
<br />
执行后，r就是{"xd","abc","cde"}，其实分割时还有跟简单的方法： <br />
<br />
String str="xd::abc::cde"; <br />
<br />
String[] r=str.split("::"); <br />
<br />
　　<br />
　　<strong>替换（删除）：</strong><br />
　　<br />
以下是代码片段：<br />
String regEx="a+"; //表示一个或多个a <br />
<br />
Pattern p=Pattern.compile(regEx); <br />
<br />
Matcher m=p.matcher("aaabbced a ccdeaa"); <br />
<br />
String s=m.replaceAll("A"); <br />
　　<br />
　　结果为"Abbced A ccdeA"<br />
　　<br />
　　如果写成空串，既可达到删除的功能，比如：<br />
　　<br />
String s=m.replaceAll("");<br />
　　<br />
　　结果为"bbced ccde"<br />
　　<br />
　　<strong>附：</strong><br />
　　<br />
　&nbsp;&nbsp;&nbsp; \D 等於 [^0-9] 非数字 <br />
　&nbsp;&nbsp;&nbsp; \s 等於 [ \t\n\x0B\f ] 空白字元 <br />
　&nbsp;&nbsp;&nbsp; \S 等於 [^ \t\n\x0B\f ] 非空白字元 <br />
　&nbsp;&nbsp;&nbsp; \w 等於 [a-zA-Z_0-9] 数字或是英文字 <br />
　　\W 等於 [^a-zA-Z_0-9] 非数字与英文字 <br />
　　<br />
　　^ 表示每行的开头<br />
　　$ 表示每行的结尾<br />
<br />
原文地址：<a href="http://java.chinaitlab.com/advance/350770.html">http://java.chinaitlab.com/advance/350770.html</a><br />
<img src ="http://www.blogjava.net/coderdream/aggbug/182662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2008-02-28 13:41 <a href="http://www.blogjava.net/coderdream/archive/2008/02/28/182662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 正则表达式（三）</title><link>http://www.blogjava.net/coderdream/archive/2008/02/28/182645.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Thu, 28 Feb 2008 05:35:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2008/02/28/182645.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/182645.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2008/02/28/182645.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/182645.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/182645.html</trackback:ping><description><![CDATA[<p>如果你曾经用过Perl或任何其他内建正则表达式支持的语言，你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语，那么&#8220;正则表达式&#8221;（Regular Expression）就是一个字符构成的串，它定义了一个用来搜索匹配字符串的模式。 </p>
<p>许多语言，包括Perl、PHP、Python、JavaScript和JScript，都支持用正则表达式处理文本，一些文本编辑器用正则表达式实现高级&#8220;搜索-替换&#8221;功能。那么Java又怎样呢？本文写作时，一个包含了用正则表达式进行文本处理的Java规范需求（Specification Request）已经得到认可，你可以期待在JDK的下一版本中看到它。 </p>
<p>然而，如果现在就需要使用正则表达式，又该怎么办呢？你可以从Apache.org下载源代码开放的Jakarta-ORO库。本文接下来的内容先简要地介绍正则表达式的入门知识，然后以Jakarta-ORO API为例介绍如何使用正则表达式。 </p>
<p><strong><font size="4">一、正则表达式基础知识</font></strong> </p>
<p>我们先从简单的开始。假设你要搜索一个包含字符&#8220;cat&#8221;的字符串，搜索用的正则表达式就是&#8220;cat&#8221;。如果搜索对大小写不敏感，单词&#8220;catalog&#8221;、&#8220;Catherine&#8221;、&#8220;sophisticated&#8221;都可以匹配。也就是说： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_a.jpg" border="0" /> </p>
<p><strong>1.1 句点符号</strong> </p>
<p>假设你在玩英文拼字游戏，想要找出三个字母的单词，而且这些单词必须以&#8220;t&#8221;字母开头，以&#8220;n&#8221;字母结束。另外，假设有一本英文字典，你可以用正则表达式搜索它的全部内容。要构造出这个正则表达式，你可以使用一个通配符——句点符号&#8220;.&#8221;。这样，完整的表达式就是&#8220;t.n&#8221;，它匹配&#8220;tan&#8221;、&#8220;ten&#8221;、&#8220;tin&#8221;和&#8220;ton&#8221;，还匹配&#8220;t#n&#8221;、&#8220;tpn&#8221;甚至&#8220;t n&#8221;，还有其他许多无意义的组合。这是因为句点符号匹配所有字符，包括空格、Tab字符甚至换行符： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_b.jpg" border="0" /> </p>
<p><strong>1.2 方括号符号</strong> </p>
<p>为了解决句点符号匹配范围过于广泛这一问题，你可以在方括号（&#8220;[]&#8221;）里面指定看来有意义的字符。此时，只有方括号里面指定的字符才参与匹配。也就是说，正则表达式&#8220;t[aeio]n&#8221;只匹配&#8220;tan&#8221;、&#8220;Ten&#8221;、&#8220;tin&#8221;和&#8220;ton&#8221;。但&#8220;Toon&#8221;不匹配，因为在方括号之内你只能匹配单个字符： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_c.jpg" border="0" /> </p>
<p><strong>1.3 &#8220;或&#8221;符号</strong> </p>
<p>如果除了上面匹配的所有单词之外，你还想要匹配&#8220;toon&#8221;，那么，你可以使用&#8220;|&#8221;操作符。&#8220;|&#8221;操作符的基本意义就是&#8220;或&#8221;运算。要匹配&#8220;toon&#8221;，使用&#8220;t(a|e|i|o|oo)n&#8221;正则表达式。这里不能使用方扩号，因为方括号只允许匹配单个字符；这里必须使用圆括号&#8220;()&#8221;。圆括号还可以用来分组，具体请参见后面介绍。 </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_d.jpg" border="0" /> </p>
<p><strong>1.4 表示匹配次数的符号</strong> </p>
<p>表一显示了表示匹配次数的符号，这些符号用来确定紧靠该符号左边的符号出现的次数： </p>
<p>
<p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4n.jpg" border="0" /></p>
<p>&nbsp;</p>
<p>假设我们要在文本文件中搜索美国的社会安全号码。这个号码的格式是999-99-9999。用来匹配它的正则表达式如图一所示。在正则表达式中，连字符（&#8220;-&#8221;）有着特殊的意义，它表示一个范围，比如从0到9。因此，匹配社会安全号码中的连字符号时，它的前面要加上一个转义字符&#8220;\&#8221;。 </p>
<p>
<p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4a.gif" border="0" /> </p>
<p>&nbsp;</p>
<p>
<p align="center">图一：匹配所有123-12-1234形式的社会安全号码</p>
<p>&nbsp;</p>
<p>假设进行搜索的时候，你希望连字符号可以出现，也可以不出现——即，999-99-9999和999999999都属于正确的格式。这时，你可以在连字符号后面加上&#8220;？&#8221;数量限定符号，如图二所示： </p>
<p>
<p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4b.gif" border="0" /> </p>
<p>&nbsp;</p>
<p>
<p align="center">图二：匹配所有123-12-1234和123121234形式的社会安全号码</p>
<p>&nbsp;</p>
<p>下面我们再来看另外一个例子。美国汽车牌照的一种格式是四个数字加上二个字母。它的正则表达式前面是数字部分&#8220;[0-9]{4}&#8221;，再加上字母部分&#8220;[A-Z]{2}&#8221;。图三显示了完整的正则表达式。 </p>
<p>
<p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4c.gif" border="0" /> </p>
<p>&nbsp;</p>
<p>
<p align="center">图三：匹配典型的美国汽车牌照号码，如8836KV</p>
<p>&nbsp;</p>
<p>1.5 &#8220;否&#8221;符号 </p>
<p>&#8220;^&#8221;符号称为&#8220;否&#8221;符号。如果用在方括号内，&#8220;^&#8221;表示不想要匹配的字符。例如，图四的正则表达式匹配所有单词，但以&#8220;X&#8221;字母开头的单词除外。 </p>
<p>
<p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4d.gif" border="0" /> </p>
<p>&nbsp;</p>
<p>
<p align="center">图四：匹配所有单词，但&#8220;X&#8221;开头的除外</p>
<p>&nbsp;</p>
<p>1.6 圆括号和空白符号 </p>
<p>假设要从格式为&#8220;June 26, 1951&#8221;的生日日期中提取出月份部分，用来匹配该日期的正则表达式可以如图五所示： </p>
<p>
<p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4e.gif" border="0" /> </p>
<p>&nbsp;</p>
<p>
<p align="center">图五：匹配所有Moth DD,YYYY格式的日期</p>
<p>&nbsp;</p>
<p>新出现的&#8220;\s&#8221;符号是空白符号，匹配所有的空白字符，包括Tab字符。如果字符串正确匹配，接下来如何提取出月份部分呢？只需在月份周围加上一个圆括号创建一个组，然后用ORO API（本文后面详细讨论）提取出它的值。修改后的正则表达式如图六所示： </p>
<p>
<p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4f.gif" border="0" /> </p>
<p>&nbsp;</p>
<p>
<p align="center">图六：匹配所有Month DD,YYYY格式的日期，定义月份值为第一个组</p>
<p>&nbsp;</p>
<p><strong>1.7 其它符号</strong> </p>
<p>为简便起见，你可以使用一些为常见正则表达式创建的快捷符号。如表二所示： </p>
<p>表二：常用符号 </p>
<p>
<p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4o.jpg" border="0" /> </p>
<p>&nbsp;</p>
<p>例如，在前面社会安全号码的例子中，所有出现&#8220;[0-9]&#8221;的地方我们都可以使用&#8220;\d&#8221;。修改后的正则表达式如图七所示： </p>
<p>
<p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4g.gif" border="0" /> </p>
<p>&nbsp;</p>
<p>
<p align="center">图七：匹配所有123-12-1234格式的社会安全号码</p>
<p>&nbsp;</p>
<p><strong><font size="4">二、Jakarta-ORO库</font></strong> </p>
<p>有许多源代码开放的正则表达式库可供Java程序员使用，而且它们中的许多支持Perl 5兼容的正则表达式语法。我在这里选用的是Jakarta-ORO正则表达式库，它是最全面的正则表达式API之一，而且它与Perl 5正则表达式完全兼容。另外，它也是优化得最好的API之一。 </p>
<p>Jakarta-ORO库以前叫做OROMatcher，Daniel Savarese大方地把它赠送给了Jakarta Project。你可以按照本文最后参考资源的说明下载它。 </p>
<p>我首先将简要介绍使用Jakarta-ORO库时你必须创建和访问的对象，然后介绍如何使用Jakarta-ORO API。 </p>
<p><strong>▲ PatternCompiler对象</strong> </p>
<p>首先，创建一个Perl5Compiler类的实例，并把它赋值给PatternCompiler接口对象。Perl5Compiler是PatternCompiler接口的一个实现，允许你把正则表达式编译成用来匹配的Pattern对象。 </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_e.jpg" border="0" /> </p>
<p><strong>▲ Pattern对象</strong> </p>
<p>要把正则表达式编译成Pattern对象，调用compiler对象的compile()方法，并在调用参数中指定正则表达式。例如，你可以按照下面这种方式编译正则表达式&#8220;t[aeio]n&#8221;： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_f.jpg" border="0" /> </p>
<p>默认情况下，编译器创建一个大小写敏感的模式（pattern）。因此，上面代码编译得到的模式只匹配&#8220;tin&#8221;、&#8220;tan&#8221;、 &#8220;ten&#8221;和&#8220;ton&#8221;，但不匹配&#8220;Tin&#8221;和&#8220;taN&#8221;。要创建一个大小写不敏感的模式，你应该在调用编译器的时候指定一个额外的参数： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_g.jpg" border="0" /> </p>
<p>创建好Pattern对象之后，你就可以通过PatternMatcher类用该Pattern对象进行模式匹配。 </p>
<p><strong>▲ PatternMatcher对象</strong> </p>
<p>PatternMatcher对象根据Pattern对象和字符串进行匹配检查。你要实例化一个Perl5Matcher类并把结果赋值给PatternMatcher接口。Perl5Matcher类是PatternMatcher接口的一个实现，它根据Perl 5正则表达式语法进行模式匹配： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_h.jpg" border="0" /> </p>
<p>使用PatternMatcher对象，你可以用多个方法进行匹配操作，这些方法的第一个参数都是需要根据正则表达式进行匹配的字符串： </p>
<p>&#183; boolean matches(String input, Pattern pattern)：当输入字符串和正则表达式要精确匹配时使用。换句话说，正则表达式必须完整地描述输入字符串。 </p>
<p>&#183; boolean matchesPrefix(String input, Pattern pattern)：当正则表达式匹配输入字符串起始部分时使用。 </p>
<p>&#183; boolean contains(String input, Pattern pattern)：当正则表达式要匹配输入字符串的一部分时使用（即，它必须是一个子串）。 </p>
<p>另外，在上面三个方法调用中，你还可以用PatternMatcherInput对象作为参数替代String对象；这时，你可以从字符串中最后一次匹配的位置开始继续进行匹配。当字符串可能有多个子串匹配给定的正则表达式时，用PatternMatcherInput对象作为参数就很有用了。用PatternMatcherInput对象作为参数替代String时，上述三个方法的语法如下： </p>
<p>&#183; boolean matches(PatternMatcherInput input, Pattern pattern) </p>
<p>&#183; boolean matchesPrefix(PatternMatcherInput input, Pattern pattern) </p>
<p>&#183; boolean contains(PatternMatcherInput input, Pattern pattern) </p>
<p><strong><font size="4">三、应用实例</font></strong> </p>
<p>下面我们来看看Jakarta-ORO库的一些应用实例。 </p>
<p><strong>3.1 日志文件处理</strong> </p>
<p>任务：分析一个Web服务器日志文件，确定每一个用户花在网站上的时间。在典型的BEA WebLogic日志文件中，日志记录的格式如下： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_i.jpg" border="0" /> </p>
<p>分析这个日志记录，可以发现，要从这个日志文件提取的内容有两项：IP地址和页面访问时间。你可以用分组符号（圆括号）从日志记录提取出IP地址和时间标记。 </p>
<p>首先我们来看看IP地址。IP地址有4个字节构成，每一个字节的值在0到255之间，各个字节通过一个句点分隔。因此，IP地址中的每一个字节有至少一个、最多三个数字。图八显示了为IP地址编写的正则表达式： </p>
<p>
<p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4h.gif" border="0" /> </p>
<p>&nbsp;</p>
<p>
<p align="center">图八：匹配IP地址</p>
<p>&nbsp;</p>
<p>IP地址中的句点字符必须进行转义处理（前面加上&#8220;\&#8221;），因为IP地址中的句点具有它本来的含义，而不是采用正则表达式语法中的特殊含义。句点在正则表达式中的特殊含义本文前面已经介绍。 </p>
<p>日志记录的时间部分由一对方括号包围。你可以按照如下思路提取出方括号里面的所有内容：首先搜索起始方括号字符（&#8220;[&#8221;），提取出所有不超过结束方括号字符（&#8220;]&#8221;）的内容，向前寻找直至找到结束方括号字符。图九显示了这部分的正则表达式。 </p>
<p>
<p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4i.gif" border="0" /> </p>
<p>&nbsp;</p>
<p>
<p align="center">图九：匹配至少一个字符，直至找到&#8220;]&#8221;</p>
<p>&nbsp;</p>
<p>现在，把上述两个正则表达式加上分组符号（圆括号）后合并成单个表达式，这样就可以从日志记录提取出IP地址和时间。注意，为了匹配&#8220;- -&#8221;（但不提取它），正则表达式中间加入了&#8220;\s-\s-\s&#8221;。完整的正则表达式如图十所示。 </p>
<p>
<p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4j.gif" border="0" /> </p>
<p>&nbsp;</p>
<p>
<p align="center">图十：匹配IP地址和时间标记</p>
<p>&nbsp;</p>
<p>现在正则表达式已经编写完毕，接下来可以编写使用正则表达式库的Java代码了。 </p>
<p>为使用Jakarta-ORO库，首先创建正则表达式字符串和待分析的日志记录字符串： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_j.jpg" border="0" /> </p>
<p>这里使用的正则表达式与图十的正则表达式差不多完全相同，但有一点例外：在Java中，你必须对每一个向前的斜杠（&#8220;\&#8221;）进行转义处理。图十不是Java的表示形式，所以我们要在每个&#8220;\&#8221;前面加上一个&#8220;\&#8221;以免出现编译错误。遗憾的是，转义处理过程很容易出现错误，所以应该小心谨慎。你可以首先输入未经转义处理的正则表达式，然后从左到右依次把每一个&#8220;\&#8221;替换成&#8220;\\&#8221;。如果要复检，你可以试着把它输出到屏幕上。 </p>
<p>初始化字符串之后，实例化PatternCompiler对象，用PatternCompiler编译正则表达式创建一个Pattern对象： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_k.jpg" border="0" /> </p>
<p>现在，创建PatternMatcher对象，调用PatternMatcher接口的contain()方法检查匹配情况： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_l.jpg" border="0" /> </p>
<p>接下来，利用PatternMatcher接口返回的MatchResult对象，输出匹配的组。由于logEntry字符串包含匹配的内容，你可以看到类如下面的输出： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_m.jpg" border="0" /> </p>
<p><strong>3.2 HTML处理实例一</strong> </p>
<p>下面一个任务是分析HTML页面内FONT标记的所有属性。HTML页面内典型的FONT标记如下所示： </p>
<p><font face="Arial, Serif" color="red" size="+2"></font><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_n.jpg" border="0" /> </p>
<p>程序将按照如下形式，输出每一个FONT标记的属性： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_o.jpg" border="0" /> </p>
<p>在这种情况下，我建议你使用两个正则表达式。第一个如图十一所示，它从字体标记提取出&#8220;"face="Arial, Serif" size="+2" color="red"&#8221;。 </p>
<p>
<p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4k.gif" border="0" /> </p>
<p>&nbsp;</p>
<p>
<p align="center">图十一：匹配FONT标记的所有属性</p>
<p>&nbsp;</p>
<p>第二个正则表达式如图十二所示，它把各个属性分割成名字-值对。 </p>
<p>
<p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4l.gif" border="0" /> </p>
<p>&nbsp;</p>
<p>
<p align="center">图十二：匹配单个属性，并把它分割成名字-值对</p>
<p>&nbsp;</p>
<p>分割结果为： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_p.jpg" border="0" /> </p>
<p>现在我们来看看完成这个任务的Java代码。首先创建两个正则表达式字符串，用Perl5Compiler把它们编译成Pattern对象。编译正则表达式的时候，指定Perl5Compiler.CASE_INSENSITIVE_MASK选项，使得匹配操作不区分大小写。 </p>
<p>接下来，创建一个执行匹配操作的Perl5Matcher对象。 </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_q.jpg" border="0" /> </p>
<p>假设有一个String类型的变量html，它代表了HTML文件中的一行内容。如果html字符串包含FONT标记，匹配器将返回true。此时，你可以用匹配器对象返回的MatchResult对象获得第一个组，它包含了FONT的所有属性： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_r.jpg" border="0" /> </p>
<p>接下来创建一个PatternMatcherInput对象。这个对象允许你从最后一次匹配的位置开始继续进行匹配操作，因此，它很适合于提取FONT标记内属性的名字-值对。创建PatternMatcherInput对象，以参数形式传入待匹配的字符串。然后，用匹配器实例提取出每一个FONT的属性。这通过指定PatternMatcherInput对象（而不是字符串对象）为参数，反复地调用PatternMatcher对象的contains()方法完成。PatternMatcherInput对象之中的每一次迭代将把它内部的指针向前移动，下一次检测将从前一次匹配位置的后面开始。 </p>
<p>本例的输出结果如下： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_s.jpg" border="0" /> </p>
<p><strong>3.3 HTML处理实例二</strong> </p>
<p>下面我们来看看另一个处理HTML的例子。这一次，我们假定Web服务器从widgets.acme.com移到了newserver.acme.com。现在你要修改一些页面中的链接： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_t.jpg" border="0" /> </p>
<p>执行这个搜索的正则表达式如图十三所示： </p>
<p>
<p align="center"><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4m.gif" border="0" /> </p>
<p>&nbsp;</p>
<p>
<p align="center">图十三：匹配修改前的链接</p>
<p>&nbsp;</p>
<p>如果能够匹配这个正则表达式，你可以用下面的内容替换图十三的链接： </p>
<p><a href="http://newserver.acme.com/interface.html#$1"></a><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_u.jpg" border="0" /> </p>
<p>注意#字符的后面加上了$1。Perl正则表达式语法用$1、$2等表示已经匹配且提取出来的组。图十三的表达式把所有作为一个组匹配和提取出来的内容附加到链接的后面。 </p>
<p>现在，返回Java。就象前面我们所做的那样，你必须创建测试字符串，创建把正则表达式编译到Pattern对象所必需的对象，以及创建一个PatternMatcher对象：<br />
<img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_v.jpg" border="0" /> </p>
<p>接下来，用com.oroinc.text.regex包Util类的substitute()静态方法进行替换，输出结果字符串： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_w.jpg" border="0" /> </p>
<p>Util.substitute()方法的语法如下： </p>
<p><img alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_x.jpg" border="0" /> </p>
<p>这个调用的前两个参数是以前创建的PatternMatcher和Pattern对象。第三个参数是一个Substiution对象，它决定了替换操作如何进行。本例使用的是Perl5Substitution对象，它能够进行Perl5风格的替换。第四个参数是想要进行替换操作的字符串，最后一个参数允许指定是否替换模式的所有匹配子串（Util.SUBSTITUTE_ALL），或只替换指定的次数。 </p>
<p><strong>【结束语】</strong>在这篇文章中，我为你介绍了正则表达式的强大功能。只要正确运用，正则表达式能够在字符串提取和文本修改中起到很大的作用。另外，我还介绍了如何在Java程序中通过Jakarta-ORO库利用正则表达式。至于最终采用老式的字符串处理方式（使用StringTokenizer，charAt，和substring），还是采用正则表达式，这就有待你自己决定了 </p>
<br />
原文地址：<a href="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4.asp">http://www.ccw.com.cn/htm/app/aprog/01_7_31_4.asp</a>
<img src ="http://www.blogjava.net/coderdream/aggbug/182645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2008-02-28 13:35 <a href="http://www.blogjava.net/coderdream/archive/2008/02/28/182645.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 正则表达式（二）</title><link>http://www.blogjava.net/coderdream/archive/2008/02/28/182643.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Thu, 28 Feb 2008 03:49:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2008/02/28/182643.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/182643.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2008/02/28/182643.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/182643.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/182643.html</trackback:ping><description><![CDATA[<p>如果我们问那些UNIX系统的爱好者他们最喜欢什么，答案除了稳定的系统和可以远程启动之外，十有八九的人会提到正则表达式；如果我们再问他们最头痛的是什么，可能除了复杂的进程控制和安装过程之外，还会是正则表达式。那么正则表达式到底是什么？如何才能真正的掌握正则表达式并正确的加以灵活运用？本文将就此展开介绍，希望能够对那些渴望了解和掌握正则表达式的读者有所助益。</p>
<p><br />
入门简介</p>
<p>　　简单的说，正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影，例如，vi编辑器，Perl或PHP脚本语言，以及awk或sed shell程序等。此外，象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。由此可见，正则表达式已经超出了某种语言或某个系统的局限，成为人们广为接受的概念和功能。</p>
<p>　　正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式，然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较，根据比较对象中是否包含匹配模式，执行相应的程序。</p>
<p>　　举例来说，正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确，用户所填写的表单信息将会被正常处理；反之，如果用户输入的邮件地址与正则表达的模式不匹配，将会弹出提示信息，要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判断中具有举足轻重的作用。</p>
<p><br />
基本语法</p>
<p>　　在对正则表达式的功能和作用有了初步的了解之后，我们就来具体看一下正则表达式的语法格式。</p>
<p>　　正则表达式的形式一般如下：</p>
<p>　　/love/</p>
<p>　　其中位于&#8220;/&#8221;定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入&#8220;/&#8221;定界符之间即可。为了能够使用户更加灵活的定制模式内容，正则表达式提供了专门的&#8220;元字符&#8221;。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符，可以用来规定其前导字符（即位于元字符前面的字符）在目标对象中的出现模式。</p>
<p>　　较为常用的元字符包括： &#8220;+&#8221;， &#8220;*&#8221;，以及 &#8220;?&#8221;。其中，&#8220;+&#8221;元字符规定其前导字符必须在目标对象? 续出现一次或多次，&#8220;*&#8221;元字符规定其前导字符必须在目标对象中出现零次或连续多次，而&#8220;?&#8221;元字符规定其前导对象必须在目标对象中连续出现零次或一次。</p>
<p>　　下面，就让我们来看一下正则表达式元字符的具体应用。</p>
<p>　　/fo+/</p>
<p>　　因为上述正则表达式中包含&#8220;+&#8221;元字符，表示可以与目标对象中的 &#8220;fool&#8221;, &#8220;fo&#8221;, 或者 &#8220;football&#8221;等在字母f后面连续出现一个或多个字母o的字符串相匹配。</p>
<p>　　/eg*/</p>
<p>　　因为上述正则表达式中包含&#8220;*&#8221;元字符，表示可以与目标对象中的 &#8220;easy&#8221;, &#8220;ego&#8221;, 或者 &#8220;egg&#8221;等在字母e后面连续出现零个或多个字母g的字符串相匹配。</p>
<p>　　/Wil?/</p>
<p>　　因为上述正则表达式中包含&#8220;？&#8221;元字符，表示可以与目标对象中的 &#8220;Win&#8221;, 或者 &#8220;Wilson&#8221;,等在字母i后面连续出现零个或一个字母l的字符串相匹配。</p>
<p>　　除了元字符之外，用户还可以精确指定模式在匹配对象中出现的频率。例如，</p>
<p>　　/jim{2,6}/</p>
<p>　　上述正则表达式规定字符m可以在匹配对象中连续出现2-6次，因此，上述正则表达式可以同jimmy或jimmmmmy等字符串相匹配。</p>
<p>　　在对如何使用正则表达式有了初步了解之后，我们来看一下其它几个重要的元字符的使用方式。</p>
<p>　　\s：用于匹配单个空格符，包括tab键和换行符；</p>
<p>　　\S：用于匹配除单个空格符之外的所有字符；</p>
<p>　　\d：用于匹配从0到9的数字；</p>
<p>　　\w：用于匹配字母，数字或下划线字符；</p>
<p>　　\W：用于匹配所有与\w不匹配的字符；</p>
<p>　　. ：用于匹配除换行符之外的所有字符。</p>
<p>　　（说明：我们可以把\s和\S以及\w和\W看作互为逆运算）</p>
<p>　　下面，我们就通过实例看一下如何在正则表达式中使用上述元字符。</p>
<p>　　/\s+/</p>
<p>　　上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。</p>
<p>　　/\d000/</p>
<p>　　如果我们手中有一份复杂的财务报表，那么我们可以通过上述正则表达式轻而易举的查找到所有总额达千元的款项。</p>
<p>　　除了我们以上所介绍的元字符之外，正则表达式中还具有另外一种较为独特的专用字符，即定位符。定位符用于规定匹配模式在目标对象中的出现位置。</p>
<p>　　较为常用的定位符包括： &#8220;^&#8221;, &#8220;$&#8221;, &#8220;\b&#8221; 以及 &#8220;\B&#8221;。其中，&#8220;^&#8221;定位符规定匹配模式必须出现在目标字符串的开头，&#8220;$&#8221;定位符规定匹配模式必须出现在目标对象的结尾，\b定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一，而&#8220;\B&#8221;定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内，即匹配对象既不能作为目标字符串的开头，也不能作为目标字符串的结尾。同样，我们也可以把&#8220;^&#8221;和&#8220;$&#8221;以及&#8220;\b&#8221;和&#8220;\B&#8221;看作是互为逆运算的两组定位符。举例来说：</p>
<p>　　/^hell/</p>
<p>　　因为上述正则表达式中包含&#8220;^&#8221;定位符，所以可以与目标对象中以 &#8220;hell&#8221;, &#8220;hello&#8221;或 &#8220;hellhound&#8221;开头的字符串相匹配。</p>
<p>　　/ar$/</p>
<p>　　因为上述正则表达式中包含&#8220;$&#8221;定位符，所以可以与目标对象中以 &#8220;car&#8221;, &#8220;bar&#8221;或 &#8220;ar&#8221; 结尾的字符串相匹配。</p>
<p>　　/\bbom/</p>
<p>　　因为上述正则表达式模式以&#8220;\b&#8221;定位符开头，所以可以与目标对象中以 &#8220;bomb&#8221;, 或 &#8220;bom&#8221;开头的字符串相匹配。</p>
<p>　　/man\b/</p>
<p>　　因为上述正则表达式模式以&#8220;\b&#8221;定位符结尾，所以可以与目标对象中以 &#8220;human&#8221;, &#8220;woman&#8221;或 &#8220;man&#8221;结尾的字符串相匹配。</p>
<p>　　为了能够方便用户更加灵活的设定匹配模式，正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如：</p>
<p>　　/[A-Z]/</p>
<p>　　上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。</p>
<p>　　/[a-z]/</p>
<p>　　上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。</p>
<p>　　/[0-9]/</p>
<p>　　上述正则表达式将会与从0到9范围内任何一个数字相匹配。</p>
<p>　　/([a-z][A-Z][0-9])+/</p>
<p>　　上述正则表达式将会与任何由字母和数字组成的字符串，如 &#8220;aB0&#8221; 等相匹配。这里需要提醒用户注意的一点就是可以在正则表达式中使用 &#8220;()&#8221; 把字符串组合在一起。&#8220;()&#8221;符号包含的内容必须同时出现在目标对象中。因此，上述正则表达式将无法与诸如 &#8220;abc&#8221;等的字符串匹配，因为&#8220;abc&#8221;中的最后一个字符为字母而非数字。</p>
<p>　　如果我们希望在正则表达式中实现类似编程逻辑中的&#8220;或&#8221;运算，在多个不同的模式中任选一个进行匹配的话，可以使用管道符 &#8220;|&#8221;。例如：</p>
<p>　　/to|too|2/</p>
<p>　　上述正则表达式将会与目标对象中的 &#8220;to&#8221;, &#8220;too&#8221;, 或 &#8220;2&#8221; 相匹配。</p>
<p>　　正则表达式中还有一个较为常用的运算符，即否定符 &#8220;[^]&#8221;。与我们前文所介绍的定位符 &#8220;^&#8221; 不同，否定符 &#8220;[^]&#8221;规定目标对象中不能存在模式中所规定的字符串。例如：</p>
<p>　　/[^A-C]/</p>
<p>　　上述字符串将会与目标对象中除A，B，和C之外的任何字符相匹配。一般来说，当&#8220;^&#8221;出现在 &#8220;[]&#8221;内时就被视做否定运算符；而当&#8220;^&#8221;位于&#8220;[]&#8221;之外，或没有&#8220;[]&#8221;时，则应当被视做定位符。</p>
<p>　　最后，当用户需要在正则表达式的模式中加入元字符，并查找其匹配对象时，可以使用转义符&#8220;\&#8221;。例如：</p>
<p>　　/Th\*/</p>
<p>　　上述正则表达式将会与目标对象中的&#8220;Th*&#8221;而非&#8220;The&#8221;等相匹配。</p>
<br />
原文链接：<a href="http://www.yesky.com/181/51681.shtml">http://www.yesky.com/181/51681.shtml</a>
<img src ="http://www.blogjava.net/coderdream/aggbug/182643.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2008-02-28 11:49 <a href="http://www.blogjava.net/coderdream/archive/2008/02/28/182643.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 正则表达式（一）</title><link>http://www.blogjava.net/coderdream/archive/2008/02/28/182530.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Thu, 28 Feb 2008 03:40:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2008/02/28/182530.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/182530.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2008/02/28/182530.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/182530.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/182530.html</trackback:ping><description><![CDATA[在String类中，有四个特殊的方法： <br />
<br />
<hr />
<pre>public <a title="java.lang 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/String.html">String</a>[] <strong>split</strong>(<a title="java.lang 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/String.html">String</a>&nbsp;regex)</pre>
<dl>
<dd>根据给定的正则表达式的匹配来拆分此字符串。
<p>该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 <a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/String.html#split(java.lang.String, int)"><code>split</code></a> 方法。因此，结果数组中不包括结尾空字符串。
<p>例如，字符串 <tt>"boo:and:foo"</tt> 产生带有下面这些表达式的结果：
<blockquote>
<table bordercolor="#0000ff" cellspacing="0" cellpadding="1" summary="Split examples showing regex and result" border="1">
    <tbody>
        <tr>
            <th>Regex</th>
            <th>结果</th>
        </tr>
        <tr>
            <td align="center">:</td>
            <td><tt>{ "boo", "and", "foo" }</tt></td>
        </tr>
        <tr>
            <td align="center">o</td>
            <td><tt>{ "b", "", ":and:f" }</tt></td>
        </tr>
    </tbody>
</table>
</blockquote>
<dd>
<dl></dl>
<dl>
<dt><strong>参数：</strong> <code>regex</code> - 定界正则表达式
<dt><strong>返回：</strong> 字符串数组，根据给定正则表达式的匹配来拆分此字符串，从而生成此数组。
<dt><strong>抛出：</strong> <code><a title="java.util.regex 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/PatternSyntaxException.html">PatternSyntaxException</a></code> - 如果正则表达式的语法无效</dt></dl></dd></dl>
<hr />
<pre>public <a title="java.lang 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/String.html">String</a>[] <strong>split</strong>(<a title="java.lang 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/String.html">String</a>&nbsp;regex, int&nbsp;limit)</pre>
<dl>
<dd>根据匹配给定的<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html#sum">正则表达式</a>来拆分此字符串。
<p>此方法返回的数组包含此字符串的每个子字符串，这些子字符串由另一个匹配给定的表达式的子字符串终止或由字符串结束来终止。数组中的子字符串按它们在此字符串中的顺序排列。如果表达式不匹配输入的任何部分，则结果数组只具有一个元素，即此字符串。
<p><tt>limit</tt> 参数控制模式应用的次数，因此影响结果数组的长度。如果该限制 <em>n</em> 大于 0，则模式将被最多应用 <em>n</em>&nbsp;-&nbsp;1 次，数组的长度将不会大于 <em>n</em>，而且数组的最后项将包含超出最后匹配的定界符的所有输入。如果 <em>n</em> 为非正，则模式将被应用尽可能多的次数，而且数组可以是任意长度。如果 <em>n</em> 为零，则模式将被应用尽可能多的次数，数组可有任何长度，并且结尾空字符串将被丢弃。
<p>例如，字符串 <tt>"boo:and:foo"</tt> 使用这些参数可生成下列结果：
<blockquote>
<table bordercolor="#0000ff" cellspacing="0" cellpadding="1" summary="Split example showing regex, limit, and result" border="1">
    <tbody>
        <tr>
            <th>Regex</th>
            <th>Limit</th>
            <th>结果</th>
            <tr>
                <td align="center">:</td>
                <td align="center">2</td>
                <td><tt>{ "boo", "and:foo" }</tt></td>
            </tr>
            <tr>
                <td align="center">:</td>
                <td align="center">5</td>
                <td><tt>{ "boo", "and", "foo" }</tt></td>
            </tr>
            <tr>
                <td align="center">:</td>
                <td align="center">-2</td>
                <td><tt>{ "boo", "and", "foo" }</tt></td>
            </tr>
            <tr>
                <td align="center">o</td>
                <td align="center">5</td>
                <td><tt>{ "b", "", ":and:f", "", "" }</tt></td>
            </tr>
            <tr>
                <td align="center">o</td>
                <td align="center">-2</td>
                <td><tt>{ "b", "", ":and:f", "", "" }</tt></td>
            </tr>
            <tr>
                <td align="center">o</td>
                <td align="center">0</td>
                <td><tt>{ "b", "", ":and:f" }</tt></td>
            </tr>
        </tbody>
    </table>
    </blockquote>
    <p>这种形式的方法调用 <em>str.</em><tt>split(</tt><em>regex</em><tt>,</tt>&nbsp;<em>n</em><tt>)</tt> 产生与以下表达式完全相同的结果：
    <blockquote><a title="java.util.regex 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html"><code>Pattern</code></a>.<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html#compile(java.lang.String)"><code>compile</code></a><tt>(</tt><em>regex</em><tt>)</tt>.<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html#split(java.lang.CharSequence, int)"><code>split</code></a><tt>(</tt><em>str</em><tt>,</tt>&nbsp;<em>n</em><tt>)</tt> </blockquote>
    <p><strong>参数：</strong> <code>regex</code> - 定界正则表达式 ；<code>limit</code> - 结果阈值，如上所述 </p>
    <dl>
    <dt><strong>返回：</strong> 字符串数组，根据给定正则表达式的匹配来拆分此字符串，从而生成此数组 </dt></dl></dd></dl>
    <hr />
    <pre>public <a title="java.lang 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/String.html">String</a> <strong>replaceAll</strong>(<a title="java.lang 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/String.html">String</a>&nbsp;regex, <a title="java.lang 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/String.html">String</a>&nbsp;replacement)</pre>
    <dl>
    <dd>使用给定的 replacement 字符串替换此字符串匹配给定的<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html#sum">正则表达式</a>的每个子字符串。
    <p>此方法调用的 <em>str</em><tt>.replaceAll(</tt><em>regex</em><tt>,</tt> <em>repl</em><tt>)</tt> 形式产生与以下表达式完全相同的结果：
    <blockquote><tt><a title="java.util.regex 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html"><code>Pattern</code></a>.<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html#compile(java.lang.String)"><code>compile</code></a>(</tt><em>regex</em><tt>).<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html#matcher(java.lang.CharSequence)"><code>matcher</code></a>(</tt><em>str</em><tt>).<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Matcher.html#replaceAll(java.lang.String)"><code>replaceAll</code></a>(</tt><em>repl</em><tt>)</tt></blockquote>
    <p><strong>参数：</strong> <code>regex</code> - 用来匹配此字符串的正则表达式 </p>
    <dl>
    <dt><strong>返回：</strong> 得到的 <tt>String</tt></dt></dl></dd></dl>
    <hr />
    <pre>public <a title="java.lang 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/String.html">String</a> <strong>replaceFirst</strong>(<a title="java.lang 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/String.html">String</a>&nbsp;regex, <a title="java.lang 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/String.html">String</a>&nbsp;replacement)</pre>
    <dl>
    <dd>使用给定的 replacement 字符串替换此字符串匹配给定的<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html#sum">正则表达式</a>的第一个子字符串。
    <p>此方法调用的 <em>str</em><tt>.replaceFirst(</tt><em>regex</em><tt>,</tt> <em>repl</em><tt>)</tt> 形式产生与以下表达式完全相同的结果：
    <blockquote><tt><a title="java.util.regex 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html"><code>Pattern</code></a>.<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html#compile(java.lang.String)"><code>compile</code></a>(</tt><em>regex</em><tt>).<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html#matcher(java.lang.CharSequence)"><code>matcher</code></a>(</tt><em>str</em><tt>).<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Matcher.html#replaceFirst(java.lang.String)"><code>replaceFirst</code></a>(</tt><em>repl</em><tt>)</tt></blockquote>
    <p><strong>参数：</strong><code>regex</code> - 用来匹配此字符串的正则表达式 </p>
    <dl>
    <dt><strong>返回：</strong> 得到的 <tt>String</tt></dt></dl></dd></dl>
    <hr />
    <p align="left">这四个方法中都有一个参数为正则表达式（Regular Expression），而不是普通的字符串。<br />
    <center><strong>在正则表达式中具有特殊含义的字符</strong></center>
    <table bordercolor="#0000ff" cellspacing="2" cellpadding="2" width="500" align="center" border="1">
        <tbody>
            <tr>
                <td>
                <p align="center"><strong>特殊字符</strong></p>
                </td>
                <td>
                <p align="center"><strong>描述</strong></p>
                </td>
            </tr>
            <tr>
                <td>&nbsp;&nbsp;&nbsp; .</td>
                <td>&nbsp;&nbsp;&nbsp; 表示任意一个字符</td>
            </tr>
            <tr>
                <td>&nbsp;&nbsp;&nbsp; [abc]</td>
                <td>&nbsp;&nbsp;&nbsp; 表示a、b或c中的任意一个字符</td>
            </tr>
            <tr>
                <td>&nbsp;&nbsp;&nbsp; [^abc]</td>
                <td>&nbsp;&nbsp;&nbsp; 除a、b和c以外的任意一个字符</td>
            </tr>
            <tr>
                <td>&nbsp;&nbsp;&nbsp; [a-zA-z]</td>
                <td>&nbsp;&nbsp;&nbsp; 介于a到z，或A到Z中的任意一个字符</td>
            </tr>
            <tr>
                <td>&nbsp;&nbsp;&nbsp; \s</td>
                <td>&nbsp;&nbsp;&nbsp;&nbsp;空白符(空格、tab、换行、换页、回车)</td>
            </tr>
            <tr>
                <td>&nbsp;&nbsp;&nbsp; \S</td>
                <td>&nbsp;&nbsp;&nbsp; 非空白符</td>
            </tr>
            <tr>
                <td>&nbsp;&nbsp;&nbsp; \d</td>
                <td>&nbsp;&nbsp;&nbsp; 任意一个数字[0-9]</td>
            </tr>
            <tr>
                <td>&nbsp;&nbsp;&nbsp; \D</td>
                <td>&nbsp;&nbsp;&nbsp; 任意一个非数字[^0-9]</td>
            </tr>
            <tr>
                <td>&nbsp;&nbsp;&nbsp; \w</td>
                <td>&nbsp;&nbsp;&nbsp; 词字符[a-zA-Z_0-9]</td>
            </tr>
            <tr>
                <td>&nbsp;&nbsp;&nbsp; \W</td>
                <td>&nbsp;&nbsp;&nbsp; 非词字符</td>
            </tr>
        </tbody>
    </table>
    <center><br />
    <strong>表示字符出现次数的符号</strong></center>
    <table bordercolor="#0000ff" cellspacing="2" cellpadding="2" width="500" align="center" border="1">
        <tbody>
            <tr>
                <td>
                <p align="center"><strong>表示次数的符号</strong></p>
                </td>
                <td>
                <p align="center"><strong>描述</strong></p>
                </td>
            </tr>
            <tr>
                <td>&nbsp;&nbsp;&nbsp; *</td>
                <td>&nbsp;&nbsp;&nbsp; 0 次或者多次</td>
            </tr>
            <tr>
                <td>&nbsp;&nbsp;&nbsp; +</td>
                <td>&nbsp;&nbsp;&nbsp; 1 次或者多次</td>
            </tr>
            <tr>
                <td>&nbsp;&nbsp;&nbsp; ?</td>
                <td>&nbsp;&nbsp;&nbsp; 0 次或者 1 次</td>
            </tr>
            <tr>
                <td>&nbsp;&nbsp;&nbsp; {n}</td>
                <td>&nbsp;&nbsp;&nbsp; 恰好 n 次</td>
            </tr>
            <tr>
                <td>&nbsp;&nbsp;&nbsp; {n, m}</td>
                <td>&nbsp;&nbsp;&nbsp; 至少 n 次，不多于 m 次</td>
            </tr>
        </tbody>
    </table>
    <br />
    <br />
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;RegDemo2&nbsp;{<br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;args<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;例如，字符串&nbsp;"boo:and:foo"&nbsp;产生带有下面这些表达式的结果：&nbsp;Regex&nbsp;结果<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;:&nbsp;{&nbsp;"boo",&nbsp;"and",&nbsp;"foo"&nbsp;}<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;o&nbsp;{&nbsp;"b",&nbsp;"",&nbsp;":and:f"&nbsp;}</span><span style="color: #008000"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;tempStr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">boo:and:foo</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tempStr.split(</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pringStringArray(a);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tempStr.split(</span><span style="color: #000000">"</span><span style="color: #000000">o</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pringStringArray(b);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">--------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Regex&nbsp;Limit&nbsp;结果<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;:&nbsp;2&nbsp;{&nbsp;"boo",&nbsp;"and:foo"&nbsp;}<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;:&nbsp;5&nbsp;{&nbsp;"boo",&nbsp;"and",&nbsp;"foo"&nbsp;}<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;:&nbsp;-2&nbsp;{&nbsp;"boo",&nbsp;"and",&nbsp;"foo"&nbsp;}<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;o&nbsp;5&nbsp;{&nbsp;"b",&nbsp;"",&nbsp;":and:f",&nbsp;"",&nbsp;""&nbsp;}<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;o&nbsp;-2&nbsp;{&nbsp;"b",&nbsp;"",&nbsp;":and:f",&nbsp;"",&nbsp;""&nbsp;}<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;o&nbsp;0&nbsp;{&nbsp;"b",&nbsp;"",&nbsp;":and:f"&nbsp;}</span><span style="color: #008000"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pringStringArray(tempStr.split(</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">));<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pringStringArray(tempStr.split(</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000">));<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pringStringArray(tempStr.split(</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">2</span><span style="color: #000000">));<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pringStringArray(tempStr.split(</span><span style="color: #000000">"</span><span style="color: #000000">o</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000">));<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pringStringArray(tempStr.split(</span><span style="color: #000000">"</span><span style="color: #000000">o</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">2</span><span style="color: #000000">));<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pringStringArray(tempStr.split(</span><span style="color: #000000">"</span><span style="color: #000000">o</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">));<br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;字符串&nbsp;"boo:and:foo"中的所有&#8220;:&#8221;都被替换为&#8220;XX&#8221;，输出：booXXandXXfoo</span><span style="color: #008000"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(tempStr.replaceAll(</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">XX</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;字符串&nbsp;"boo:and:foo"中的第一个&#8220;:&#8221;都被替换为&#8220;XX&#8221;，输出：&nbsp;booXXand:foo</span><span style="color: #008000"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(tempStr.replaceFirst(</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">XX</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
    &nbsp;&nbsp;&nbsp;&nbsp;}<br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;pringStringArray(String[]&nbsp;s)&nbsp;{<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;index&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;s.length;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;index;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(i&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;s[i]);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
    &nbsp;&nbsp;&nbsp;&nbsp;}<br />
    }</span></div>
    <br />
    下面的程序演示了正则表达式的用法：<br />
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">/**</span><span style="color: #008000"><br />
    &nbsp;*&nbsp;discription:<br />
    &nbsp;*&nbsp;<br />
    &nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;CoderDream<br />
    &nbsp;*&nbsp;<br />
    &nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
    </span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;RegularExTester&nbsp;{<br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;args<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;把字符串中的&#8220;aaa&#8221;全部替換為&#8220;z&#8221;，打印：zbzcz</span><span style="color: #008000"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">aaabaaacaaa</span><span style="color: #000000">"</span><span style="color: #000000">.replaceAll(</span><span style="color: #000000">"</span><span style="color: #000000">a{3}</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">z</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;把字符串中的&#8220;aaa&#8221;、&#8220;aa&#8221;或者&#8220;a&#8221;全部替換為&#8220;*&#8221;，打印：*b*c*</span><span style="color: #008000"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">aaabaaca</span><span style="color: #000000">"</span><span style="color: #000000">.replaceAll(</span><span style="color: #000000">"</span><span style="color: #000000">a{1,3}</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">\\*</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;把字符串中的數字全部替換為&#8220;z&#8221;，打印：zzzazzbzzcc</span><span style="color: #008000"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">123a44b35cc</span><span style="color: #000000">"</span><span style="color: #000000">.replaceAll(</span><span style="color: #000000">"</span><span style="color: #000000">\\d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">z</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;把字符串中的非數字全部替換為&#8220;0&#8221;，打印：1234000435000</span><span style="color: #008000"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">1234abc435def</span><span style="color: #000000">"</span><span style="color: #000000">.replaceAll(</span><span style="color: #000000">"</span><span style="color: #000000">\\D</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">0</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;把字符串中的&#8220;.&#8221;全部替換為&#8220;\&#8221;，打印：com\abc\dollapp\Doll</span><span style="color: #008000"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">com.abc.dollapp.Doll</span><span style="color: #000000">"</span><span style="color: #000000">.replaceAll(</span><span style="color: #000000">"</span><span style="color: #000000">\\.</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">\\\\</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;把字符串中的&#8220;a.b&#8221;全部替換為&#8220;_&#8221;，<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;&#8220;a.b&#8221;表示長度為3的字符串，以&#8220;a&#8221;開頭，以&#8220;b&#8221;結尾<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;打印：-hello-all</span><span style="color: #008000"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">azbhelloahball</span><span style="color: #000000">"</span><span style="color: #000000">.replaceAll(</span><span style="color: #000000">"</span><span style="color: #000000">a.b</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">-</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;把字符串中的所有詞字符替換為&#8220;#&#8221;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;正則表達式&#8220;[a-zA-z_0-9]&#8221;等價于&#8220;\w&#8221;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;打印：#.#.#.#.#.#</span><span style="color: #008000"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">a.b.c.1.2.3.4</span><span style="color: #000000">"</span><span style="color: #000000">.replaceAll(</span><span style="color: #000000">"</span><span style="color: #000000">[a-zA-z_0-9]</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">#</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">a.b.c.1.2.3.4</span><span style="color: #000000">"</span><span style="color: #000000">.replaceAll(</span><span style="color: #000000">"</span><span style="color: #000000">\\w</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">#</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
    &nbsp;&nbsp;&nbsp;&nbsp;}<br />
    }</span></div>
    <br />
    值得注意的是，由于&#8220;.&#8221;、&#8220;?&#8221;和&#8220;*&#8221;等在正则表达式中具有特殊的含义，如果要表示字面上的这些字符，必须以&#8220;\\&#8221;开头。例如为了把字符串&#8220;com.abc.dollapp.Doll&#8221;中的&#8220;.&#8221;替换为&#8220;\&#8221;，应该调用replaceAll("\\.",<a>\\\\</a>)方法。<br />
    <br />
    <h3>Java中的正则表达式类</h3>
    <hr />
    <p>&nbsp;public interface <strong>MatchResult</strong></p>
    <pre></pre>
    <p>匹配操作的结果。
    <p>此接口包含用于确定与正则表达式匹配结果的查询方法。通过 <code>MatchResult</code> 可以查看匹配边界、组和组边界，但是不能修改<br />
    </p>
    <hr />
    <p>&nbsp;public final class <strong>Matcher</strong></p>
    <dl>
    <dt>
    <pre><dt>extends <a title="java.lang 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/Object.html">Object</a><dt>implements <a title="java.util.regex 中的接口" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/MatchResult.html">MatchResult</a></dt></pre>
    </dt></dl>
    <pre></pre>
    <p>通过解释 <a title="java.util.regex 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html"><code>Pattern</code></a> 对 <a title="java.lang 中的接口" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/CharSequence.html"><code></code>字符序列<code></code></a> 执行匹配操作的引擎。
    <p>通过调用模式的 <a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html#matcher(java.lang.CharSequence)"><code>matcher</code></a> 方法从模式创建匹配器。创建匹配器后，可以使用它执行三种不同的匹配操作：
    <ul>
        <li>
        <p><a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Matcher.html#matches()"><code>matches</code></a> 方法尝试将整个输入序列与该模式匹配。 </p>
        <li>
        <p><a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Matcher.html#lookingAt()"><code>lookingAt</code></a> 尝试将输入序列从头开始与该模式匹配。 </p>
        <li>
        <p><a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Matcher.html#find()"><code>find</code></a> 方法扫描输入序列以查找与该模式匹配的下一个子序列。 </p>
        </li>
    </ul>
    <p>每个方法都返回一个表示成功或失败的布尔值。通过查询匹配器的状态可以获取关于成功匹配的更多信息。<br />
    </p>
    <hr />
    <p>&nbsp;public final class <strong>Pattern</strong></p>
    <dl>
    <dt>
    <pre><dt>extends <a title="java.lang 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/Object.html">Object</a><dt>implements <a title="java.io 中的接口" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/io/Serializable.html">Serializable</a></dt></pre>
    </dt></dl>
    <pre></pre>
    <p>正则表达式的编译表示形式。
    <p>指定为字符串的正则表达式必须首先被编译为此类的实例。然后，可将得到的模式用于创建 <a title="java.util.regex 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Matcher.html"><code>Matcher</code></a> 对象，依照正则表达式，该对象可以与任意<a title="java.lang 中的接口" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/CharSequence.html"><code></code>字符序列<code></code></a>匹配。执行匹配所涉及的所有状态都驻留在匹配器中，所以多个匹配器可以共享同一模式。
    <p>因此，典型的调用顺序是
    <blockquote>
    <pre> Pattern p = Pattern.<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html#compile(java.lang.String)"><code>compile</code></a>("a*b");
    Matcher m = p.<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html#matcher(java.lang.CharSequence)"><code>matcher</code></a>("aaaaab");
    boolean b = m.<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Matcher.html#matches()"><code>matches</code></a>();</pre>
    </blockquote>
    <p>在仅使用一次正则表达式时，可以方便地通过此类定义 <a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Pattern.html#matches(java.lang.String, java.lang.CharSequence)"><code>matches</code></a> 方法。此方法编译表达式并在单个调用中将输入序列与其匹配。语句
    <blockquote>
    <pre> boolean b = Pattern.matches("a*b", "aaaaab");</pre>
    </blockquote>
    <p>等效于上面的三个语句，尽管对于重复的匹配而言它效率不高，因为它不允许重用已编译的模式。 </p>
    <p>此类的实例是不可变的，可供多个并发线程安全使用。<a title="java.util.regex 中的类" href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/regex/Matcher.html"><code>Matcher</code></a> 类的实例用于此目的则不安全。</p>
    <p><br />
    测试代码：</p>
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008000">/**</span><span style="color: #008000"><br />
    &nbsp;*&nbsp;discription:Java中正则表达式类的使用<br />
    &nbsp;*&nbsp;<br />
    &nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;CoderDream<br />
    &nbsp;*&nbsp;<br />
    &nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
    </span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;RegDemo&nbsp;{<br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;args<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;檢查字符串中是否含有&#8220;aaa&#8221;，有返回：true，無返回：false</span><span style="color: #008000"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(isHaveBeenSetting(</span><span style="color: #000000">"</span><span style="color: #000000">a{3}</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">aaabaaacaaa</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(isHaveBeenSetting(</span><span style="color: #000000">"</span><span style="color: #000000">a{3}</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">aab</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;把字符串&#8220;abbaaacbaaaab&#8221;中的&#8220;aaa&#8221;全部替換為&#8220;z&#8221;，打印：abbzbza</span><span style="color: #008000"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(replaceStr(</span><span style="color: #000000">"</span><span style="color: #000000">a{3}</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">abbaaabaaaa</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">z</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
    &nbsp;&nbsp;&nbsp;&nbsp;}<br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;regEx<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设定的正则表达式<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;tempStr<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;系统参数中的设定的字符串<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000">&nbsp;是否系统参数中的设定的字符串含有设定的正则表达式&nbsp;如果有的则返回true<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;isHaveBeenSetting(String&nbsp;regEx,&nbsp;String&nbsp;tempStr)&nbsp;{<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pattern&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Pattern.compile(regEx);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Matcher&nbsp;m&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;p.matcher(tempStr);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;m.find();<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;result;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;}<br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;将字符串含有的regEx表达式替换为replaceRegEx<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;regEx<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;需要被替换的正则表达式<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;tempStr<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;替换的字符串<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;replaceRegEx<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;替换的正则表达式<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000">&nbsp;替換好后的字符串<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;String&nbsp;replaceStr(String&nbsp;regEx,&nbsp;String&nbsp;tempStr,<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;replaceRegEx)&nbsp;{<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pattern&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Pattern.compile(regEx);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Matcher&nbsp;m&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;p.matcher(tempStr);<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tempStr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;m.replaceAll(replaceRegEx);<br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;tempStr;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;}<br />
    }<br />
    </span></div>
 <img src ="http://www.blogjava.net/coderdream/aggbug/182530.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2008-02-28 11:40 <a href="http://www.blogjava.net/coderdream/archive/2008/02/28/182530.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Practical Java 学习笔记-- 1 一般技术(General Techniques)</title><link>http://www.blogjava.net/coderdream/archive/2008/02/26/182267.html</link><dc:creator>CoderDream</dc:creator><author>CoderDream</author><pubDate>Tue, 26 Feb 2008 09:56:00 GMT</pubDate><guid>http://www.blogjava.net/coderdream/archive/2008/02/26/182267.html</guid><wfw:comment>http://www.blogjava.net/coderdream/comments/182267.html</wfw:comment><comments>http://www.blogjava.net/coderdream/archive/2008/02/26/182267.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/coderdream/comments/commentRss/182267.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/coderdream/services/trackbacks/182267.html</trackback:ping><description><![CDATA[<a href="#p1">实践1：参数以by value方式而非by reference方式传递</a><br />
<a href="#p2">实践2：对不变的data和object reference使用final</a> <br />
<a href="#p3">实践3：缺省情况下所有non-static函数都可被重写</a><br />
<a href="#p4">实践4：在array和Vectors之间慎重选择</a><br />
<a href="#p5">实践5：多态(polymorphism)优于instanceof </a><br />
<a href="#p6">实践6：必要时才使用instanceof </a><br />
<a href="#p7">实践7：一旦不需要object reference，就将它设为null</a>
<h3><a id="p1" name="p1">实践1：参数以by value方式而非by reference方式传递</a></h3>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.awt.Point;<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;PassByValue&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;modifyPoint(Point&nbsp;pt,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pt.setLocation(</span><span style="color: #000000">5</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000">);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;1</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">15</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">During&nbsp;modifyPoint&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">pt&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;pt&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;and&nbsp;j&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;j);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String&nbsp;args[])&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Point&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Point(</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;2</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Before&nbsp;modifyPoint&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">p&nbsp;&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;p&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;and&nbsp;i&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modifyPoint(p,&nbsp;i);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;3</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">After&nbsp;&nbsp;modifyPoint&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">p&nbsp;&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;p&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;and&nbsp;i&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
这段代码在//2处建立了一个Point对象并设初值为(0,0)，接着将其值赋予object reference 变量p。然后对基本类型int i赋值10。//3调用static modifyPoint()，传入p和i。modifyPoint()对第一个参数pt调用了setLocation()，将其左边改为(5,5)。然后将第二个参数j赋值为15.当modifyPoint()返回的时候，main()打印出p和i的值。<br />
<br />
程序输出如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">Before&nbsp;modifyPoint&nbsp;p&nbsp;&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;java.awt.Point</span><span style="color: #ff0000">[</span><span style="color: #ff0000">x=0,y=0</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000"><br />
During&nbsp;modifyPoint&nbsp;pt&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;java.awt.Point</span><span style="color: #ff0000">[</span><span style="color: #ff0000">x=5,y=5</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">15</span><span style="color: #000000"><br />
After&nbsp;&nbsp; modifyPoint&nbsp;p&nbsp;&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;java.awt.Point</span><span style="color: #ff0000">[</span><span style="color: #ff0000">x=5,y=5</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">10</span></div>
<br />
这显示modifyPoint()改变了//2 所建立的Point对象，却没有改变int i。在main()之中，i被赋值10.由于参数通过by value方式传递，所以modifyPoint()收到i的一个副本，然后它将这个副本改为15并返回。main()内的原值i并没有受到影响。<br />
<br />
对比之下，事实上modifyPoint() 是在与&#8220;Point 对象的 reference 的复件&#8221;打交道，而不是与&#8220;Point对象的复件&#8221;打交道。当p从main()被传入modifyPoint()时，传递的是p（也就是一个reference）的复件。所以modifyPoint()是在与同一个对象打交道，只不过通过别名pt罢了。在进入modifyPoint()之后和执行 //1 之前，这个对象看起来是这样：<br />
<img height="121" alt="" src="http://www.blogjava.net/images/blogjava_net/coderdream/Java/080226/Java_000.gif" width="240" border="1" /><br />
所以//1 执行以后，这个Point对象已经改变为(5,5)。
<h3><a id="p2" name="p2">实践2：对不变的data和object reference使用final</a></h3>
<p>Java 关键字 final 用来表示常量数据。例如：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Test&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;someInt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span style="color: #008000"><br />
</span><span style="color: #000000">}</span></div>
<p>这段代码声明了一个 static 类变量，命名为 someInt，并设其初值为10。<br />
任何试图修改 someInt 的代码都将无法通过编译。例如：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;someInt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">9</span><span style="color: #000000">;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Error<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span></div>
<p>关键字 final 可防止 classes 内的 instance 数据遭到无意间的修改。如果我们想要一个常量对象，又该如何呢？例如：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Circle&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;rad;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Circle(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;r)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rad&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;r;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setRadius(</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;r)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rad&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;r;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;radius()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;rad;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;FinalTest&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;Circle&nbsp;wheel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Circle(</span><span style="color: #000000">5.0</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String&nbsp;args[])&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Radius&nbsp;of&nbsp;wheel&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;wheel.radius());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wheel.setRadius(</span><span style="color: #000000">7.4</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Radius&nbsp;of&nbsp;wheel&nbsp;is&nbsp;now&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;wheel.radius());<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<p>这段代码的输出是：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">Radius&nbsp;of&nbsp;wheel&nbsp;is&nbsp;</span><span style="color: #000000">5.0</span><span style="color: #000000"><br />
Radius&nbsp;of&nbsp;wheel&nbsp;is&nbsp;now&nbsp;</span><span style="color: #000000">7.4</span></div>
<p>在上述第一个示例中，我们企图改变final 数据值时，编译器会侦测出错误。<br />
在第二个示例中，虽然代码改变了 instance变量wheel的值，编译器还是让它通过了。我们已经明确声明wheel为final，它怎么还能被改变呢？<br />
不，我们确实没有改变 wheel 的值，我们改变的是wheel 所指对象的值。wheel 并无变化，仍然指向（代表）同一个对象。变量wheel是一个 object reference，它指向对象所在的heap位置。有鉴如此，下面的代码会怎样？</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;FinalTest&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;Circle&nbsp;wheel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Circle(</span><span style="color: #000000">5.0</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String&nbsp;args[])&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Radius&nbsp;of&nbsp;wheel&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;wheel.radius());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wheel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Circle(</span><span style="color: #000000">7.4</span><span style="color: #000000">);&nbsp;// 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Radius&nbsp;of&nbsp;wheel&nbsp;is&nbsp;now&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;wheel.radius());<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<p>编译代码，// 1 处出错。由于我们企图改变 final 型变量 wheel 的值，所以这个示例将产生编译错误。换言之，代码企图令wheel指向其他对象。变量wheel是final，因此也是不可变的。它必须永远指向同一个对象。然而wheel所指向的对象并不受关键字final的影响，因此是可变的。</p>
<p>关键字 final 只能防止变量值的改变。如果被声明为 final 的变量是个 object reference，那么该reference不能被改变，必须永远指向同一个对象，但被指的那个对象可以随意改变内部的属性值。 </p>
<h3><a id="P3" name="P3">实践3：缺省情况下所有non-static函数都可以被覆盖重写</a></h3>
关键字final 在Java中有多重用途，即可被用于instance变量、static变量，也可用于classes或methods，用于类，表示该类不能有子类；用于方法，表示该方法不允许被子类覆盖。
<h3><a id="p4" name="p4">实践4：在array和vectors之间慎重选择</a></h3>
<p align="center">array和Vector的比较 </p>
<table bordercolor="#0000ff" cellspacing="2" cellpadding="2" width="500" align="center" bgcolor="#ccffcc" border="1">
    <tbody>
        <tr>
            <td>
            <p align="center">&nbsp;</p>
            </td>
            <td>
            <p align="center">支持基本类型</p>
            </td>
            <td>
            <p align="center">支持对象</p>
            </td>
            <td>
            <p align="center">自动改变大小</p>
            </td>
            <td>
            <p align="center">速度快</p>
            </td>
        </tr>
        <tr>
            <td>
            <p align="center">array</p>
            </td>
            <td>
            <p align="center">Yes</p>
            </td>
            <td>
            <p align="center">Yes</p>
            </td>
            <td>
            <p align="center">No</p>
            </td>
            <td>
            <p align="center">Yes</p>
            </td>
        </tr>
        <tr>
            <td>
            <p align="center">Vector</p>
            </td>
            <td>
            <p align="center">No（1.5以上支持）</p>
            </td>
            <td>
            <p align="center">Yes</p>
            </td>
            <td>
            <p align="center">Yes</p>
            </td>
            <td>
            <p align="center">No</p>
            </td>
        </tr>
    </tbody>
</table>
<h3><a id="p5" name="p5">实践5：多态（polymorphism）优于instanceof</a></h3>
<p>代码1：instanceof方式</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;Employee&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;salary();<br />
}<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Manager&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Employee&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;mgrSal&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">40000</span><span style="color: #000000">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;salary()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;mgrSal;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Programmer&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Employee&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;prgSal&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">50000</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;prgBonus&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10000</span><span style="color: #000000">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;salary()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;prgSal;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;bonus()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;prgBonus;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Payroll&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;calcPayroll(Employee&nbsp;emp)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;money&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;emp.salary();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(emp&nbsp;</span><span style="color: #0000ff">instanceof</span><span style="color: #000000">&nbsp;Programmer)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;money&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;((Programmer)&nbsp;emp).bonus();&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Calculate&nbsp;the&nbsp;bonus</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;money;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String&nbsp;args[])&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Payroll&nbsp;pr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Payroll();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Programmer&nbsp;prg&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Programmer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manager&nbsp;mgr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Manager();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Payroll&nbsp;for&nbsp;Programmer&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;pr.calcPayroll(prg));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">payroll&nbsp;for&nbsp;Manager&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;pr.calcPayroll(mgr));<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
依据这个设计，calcPayroll()必须使用instanceof操作符才能计算出正确结果。因为它使用了Employee接口，所以它必须断定Employee对象究竟实际属于哪个class。程序员有奖金而经理没有，所以你必须确定Employee对象的运行时类型。<br />
<br />
代码2：多态方式<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;Employee&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;salary();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;bonus();<br />
}<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Manager&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Employee&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;mgrSal&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">40000</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;mgrBonus&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;salary()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;mgrSal;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;bonus()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;mgrBonus;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Programmer&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Employee&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;prgSal&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">50000</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;prgBonus&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10000</span><span style="color: #000000">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;salary()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;prgSal;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;bonus()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;prgBonus;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Payroll&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;calcPayroll(Employee&nbsp;emp)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Calculate&nbsp;the&nbsp;bonus.&nbsp;No&nbsp;instanceof&nbsp;check&nbsp;needed.</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;emp.salary()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;emp.bonus();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String&nbsp;args[])&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Payroll&nbsp;pr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Payroll();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Programmer&nbsp;prg&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Programmer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manager&nbsp;mgr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Manager();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Payroll&nbsp;for&nbsp;Programmer&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;pr.calcPayroll(prg));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Payroll&nbsp;for&nbsp;Manager&nbsp;is&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;pr.calcPayroll(mgr));<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
在这个设计中，我们为Employee接口增加了 bonus()，从而消除了instanceof的必要性。实现Employee接口的两个 classes：Programmer和Manager，都必须实现salary()和bonus()。这些修改显著简化了calcPayroll()。<br />
<br />
<br />
<h3><a id="p6" name="p6">实践6：必要时才使用instanceof</a></h3>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Vector;<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Shape&nbsp;{<br />
}<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Circle&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Shape&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;radius()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">5.7</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span style="color: #008000"><br />
</span><span style="color: #000000">}<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Triangle&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Shape&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;isRightTriangle()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Code&nbsp;to&nbsp;determine&nbsp;if&nbsp;triangle&nbsp;is&nbsp;right</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span style="color: #008000"><br />
</span><span style="color: #000000">}<br />
<br />
</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;StoreShapes&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String&nbsp;args[])&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vector&nbsp;shapeVector&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Vector(</span><span style="color: #000000">10</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shapeVector.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Triangle());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shapeVector.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Triangle());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shapeVector.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Circle());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Assume&nbsp;many&nbsp;Triangles&nbsp;and&nbsp;Circles&nbsp;are&nbsp;added&nbsp;and&nbsp;removed<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;size&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;shapeVector.size();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;size;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;o&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;shapeVector.get(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(o&nbsp;</span><span style="color: #0000ff">instanceof</span><span style="color: #000000">&nbsp;Triangle)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(((Triangle)&nbsp;o).isRightTriangle())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(o&nbsp;</span><span style="color: #0000ff">instanceof</span><span style="color: #000000">&nbsp;Circle)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;rad&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;((Circle)&nbsp;o).radius();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
这段代码表明在 这种场合下 instanceof 操作符是必需的。当程序从Vector 取回对象，它们属于java.lang.Object。利用instanceof确定对象实际属于哪个class后，我们才能正确执行向下转型，而不至于在运行期抛出异常。<br />
<br />
<h3><a id="p7" name="p7">实践7：一旦不再需要object reference，就将它设为null</a></h3>
<img src ="http://www.blogjava.net/coderdream/aggbug/182267.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/coderdream/" target="_blank">CoderDream</a> 2008-02-26 17:56 <a href="http://www.blogjava.net/coderdream/archive/2008/02/26/182267.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>