自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (8)
  • 收藏
  • 关注

原创 断言

-- Start断言通常只用在开发和测试阶段, 用来表示致命的, 不可恢复的错误, 尤其是用在单元测试的时候.断言的形式assert 条件assert 条件:表达式断言将对条件进行判断, 如果条件是 false 则抛出 AssertionError 异常, 如果采用第二种形式, 表达式将被用来构造 AssertionError 异常.启用和禁用断言默认情况下, 断言是禁用的,

2012-05-30 14:41:29 870

原创 如何写出高效的正则表达式

-- Start有相当大的一部分程序员他们只考虑如何能尽快把活干完,从来不考虑如何使自己的代码更完美,更高效,这样的程序员永远也达不到一定的高度。当然,在写正则表达式的时候,我们首先要保证准确性,其次才是效率问题。下面是一些提高正则表达式效率的小窍门。尽量重用已编译的正则表达式在 Java 中使用正则表达式的时候我们需要先编译,所以应该尽量重用我们已经定义的正则表达式。优先使用非捕

2012-05-29 19:41:35 2338

原创 异常

-- Start所有的异常都继承自 Throwable, 其中 Error 和 RuntimeException 被称为非检查异常. 因为他们不需要我们捕获, 出现 Error, 那一定是 Java 本身的问题, 出现 RuntimeException, 那一定是你的问题, 如: 出现 NullPointerException, 一定是你在没有初始化对象的情况下调用了对象的方法或属性.下面

2012-05-29 17:34:50 584

原创 动态代理

-- StartJava 的反射功能很强大, 但是我们并不能通过反射实例化一个接口, 也不能动态定义一个新类. 为了解决这个问题, 我们可以利用动态代理在运行时创建一个实现了一组给定接口的新类, 只有在编译时无法确定需要实现哪个接口时才使用代理.import java.lang.reflect.InvocationHandler;import java.lang.reflect.M

2012-05-28 15:35:07 623

原创 去掉文件名中的路径

-- Start如何把一个文件名中的路径去掉呢? 如: /var/tmp/test.txt, 在EmEditor试一试下面的表达式吧。^.*/--更多参见:正则表达式精萃-- 声 明:转载请注明出处-- Last Updated on 2012-05-25-- Written by ShangBo on 2012-05-25-- End

2012-05-25 21:33:47 2812

原创 去除首尾空白字符

-- Start在对文件进行操作的时候,我们经常需要去除文件中每一行的首尾空白字符,使用正则表达式,这是一个非常轻松的活,在 EmEditor 中试一试下面的表达式吧。^\s+|\s+$--更多参见:正则表达式精萃-- 声 明:转载请注明出处-- Last Updated on 2012-05-25-- Written by ShangBo on 2012-05-25

2012-05-25 21:26:14 2193

原创 固化分组和占有量词

-- Start假设我们有这样的问题,把类似 3.690000023 的小数保留两位小数,类似 2.3563895 的小数保留三位小数,也就是说如果小数的第三位是 0, 则保留两位小数,如果是非 0, 就保留三位小数,该怎么呢? 这个问题比较简单,用下面的 Perl 代码。$number =~ s/(\.\d\d[1-9]?)\d*/$1/;这个表达式完全可以工作,美中不足的一点是,当

2012-05-25 20:10:55 2052

原创 内部类

-- Start定义在类中的内部类public class Test { public static void main(String[] args) throws Exception { Outer o = new Outer("尚波"); // 要想实例化内部类, 首先必须得到外部类对象 Outer.Inner i = o.new Inner(); // 用特殊的 ne

2012-05-25 17:48:55 659

原创 重写 copy 方法

-- Start重写 copy 方法有几点需要注意.重新定义 Oject 类中的 copy方法并将方法从 protected 修改为 public, 将方法的返回值类型从 Object 修改为具体类型 (在 JDK 1.5 之前, 在覆盖方法时, 我们不能改变返回类型, 从 1.5 开始, 我们可以返回子类型).实现 Cloneable 接口. Cloneable 接口中并没有任何方法

2012-05-25 14:40:11 1245

原创 实现 Comparable 和 Comparator 接口

-- StartComparable 和 Comparator 接口中都有 compare 方法, 实现 compare 方法和实现 equals 方法类似, 也需要考虑有无子类两种情况. 除此之外, 有以下几点需要注意.1. 一致性: compare 方法和 equals 方法的定义应该一致, 也就是说, 如果 x.equals(y), 那么 x.compareTo(y) == 0. 注

2012-05-25 11:39:32 776

原创 回溯

-- Start在上一节中我们了解了什么是回溯,通常量词和多选结构会引起回溯。假设用表达式 ^.*([0-9]+) 去匹配 "恋曲 1990",括号中会匹配什么呢?我们的本意是匹配 1990, 但是遗憾的是它只能匹配一个 0, 为什么会这样呢?因为星号是贪婪量词,.* 会一直匹配到字符串的结尾,为了使整个表达式能够匹配成功,引擎会进行回溯,吐出一个字符,之后再次尝试匹配整个表达式,此时匹配成功

2012-05-24 21:06:06 1333 1

原创 反射

-- Start反射是一个很强大的工具, 它赋予我们动态分析类和对象的能力, 下面的例子对比了采用正常方式和反射方式操作对象.import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;public class Test { pub

2012-05-24 16:43:45 779

原创 枚举

-- Start枚举通常用来封装一组表示分类的常量值, 如: 生物包括动物和植物, 我们可以定义如下枚举来表示生物.enum Organism { ANIMAL, PLANT;}从本质上说, 上面语句的意思是定义一个类 Organism, 它有两个实例 ANIMAL 和 PLANT. 因为它本质上是类, 所以我们还可以给枚举添加构造器, 方法和域.enum Organism {

2012-05-23 15:38:58 732

原创 正则表达式的匹配原理

-- Start虽然支持正则表达式的工具有很多,但在这些工具的背后都是使用以下两种引擎之一来解析字符串。不同的引擎支持的元字符及工作原理是不同的,下面我们看看它们的工作原理。非确定型有穷自动机(NFA):表达式主导我们用表达式 reg(ress|ular) 匹配文本 I love regular expressions,NFA 引擎从表达式 r 开始,检查当前表达式 r 是否和

2012-05-21 21:43:28 4188

原创 重写 hashCode 方法

-- Startequals 和 hashCode 的定义必须一致, 如果 x.equals(y) == true, 那么 x.hashCode 与 y.hashCode 必须返回相同的值, 所以如果重写了 equals 方法, 那么我们必须重写 hashCode 方法.class Poeple { private String name; private int age;

2012-05-18 14:05:52 1808

原创 重写 equals 方法

-- Start重写 equals 方法是一件很令人头疼的事情, Java 语言规范要求 equals 方法具有下面的特性:1. 自反性: x.equals(x)应该返回true.2. 对称性: 如果x.equals(y)返回true, 那么y.equals(x)也应该返回true.3. 传递性: 如果x.equals(y)返回true, y.equals(z)返回true,

2012-05-18 13:33:09 1087

原创 对象初始化方式及顺序

-- Start对象初始化方式我们可以通过以下三种方式来初始对象.静态初始化块初始化块构造方法对象初始化方式的顺序下面的例子演示了对象各种初始化方式的顺序.public class Test {    public static void main(String[] args) {    new Student();    }}class

2012-05-17 10:43:23 1054

原创 域和局部变量的初始值

-- Start如果沒有显示给域赋初值, 那么它会被自动赋初始值, 数值为0, 布尔值为false, 对象为null. 值得注意的是我们在使用局部变量之前, 必须明确的初始化局部变量, 否则编译会报错. private byte b; private short s; private int i; private long l; private flo

2012-05-17 09:22:37 1368 2

原创 方法重载

-- Start在一个类中, 可以有多个方法名相同, 参数不同的方法, 我们把这种能力称为方法重载. 值得注意的是方法的返回类型不能用来区分同名方法.--更多参见:Java 精萃-- 声 明:转载请注明出处-- Last Updated on 2012-05-16-- Written by ShangBo on 2012-05-16-- End

2012-05-16 17:39:11 588

原创 私有域的访问权限

-- Start我们都知道对象的私有变量只有它自己能访问, 其他任何对象都不能访问, 然而如果你看 String 类的源代码, 你会发现如下的代码.private final char value[];private final int offset;private final int count;public boolean equals(Object anObject) {

2012-05-16 17:16:30 1973

原创 保护性 copy

-- StartJava 程序员应该对 JavaBean 了如指掌. JavaBean 对数据进行了很好的封装, 我们通过它的 get 和 set 方法来访问数据. 但是值得注意的是,get 方法不应该返回可变对象, 即使一定要返回的话, 也应该使用保护性copy, 否则就失去了封装的意义. 由于我们通常很少自己写 get 和 set 方法, 都是使用 Eclipse 帮我们自动生成, 甚至有

2012-05-16 14:48:27 702

原创 格式化消息

-- Start任何程序都需要向用户显示消息, 无论是成功的消息或者是失败的消息. 通常我们通过字符串拼接来构造消息, 下面是一个简单的例子.public static void main(String[] args) throws Exception { Scanner in = new Scanner(System.in); System.out.print("What is

2012-05-15 17:45:18 1435

原创 分组,捕获及后向引用

-- Start我们在 括号及后向引用 一节中了解到了括号的两种用途:分组和捕获。分组事实上,正在表达式还一共提供了三种结构用于分组,如下:元字符(Metacharacter) 匹配(Matches)(...) 分组(?:...) 分组(?>…) 固化分组 它们之间有什么区别呢? 我

2012-05-13 10:42:05 1658

原创 贪婪,非贪婪和占有量词的区别

-- Start我们在 量词 一节中介绍了什么量词以及贪婪与非贪婪量词之间的区别。事实上,通常正则表达式支持以下三种量词。贪婪量词非贪婪量词占有量词匹配X?  X??X?+匹配X 0次或1次X*  X*?X*+匹配X 0次或无数次X+  X+?X++匹配X 1次或无数次

2012-05-12 21:13:37 2142

原创 条件判断

-- Start正则表达式还支持简单的条件判断结构,格式如下:(?if then |else)其中的 if 部分是特殊的表达式,而 then 和 else 部分是普通的正则表达式,else 部分是可选的。1. if  部分可以测试捕获,下面是一个简单的例子。#!/usr/bin/perlmy $testText = "#test#";if($testText

2012-05-12 21:11:05 1025

原创 匹配的起始位置 \G

-- Start\G 通常应用于迭代操作中,它指示上次匹配的结束位置或本次匹配的开始位置。第一次迭代时,\G 匹配字符串的开始。如果在迭代的过程中正则表达式不能匹配成功,\G 会重新指向字符串的开始位置。但是如果我们指定了 Perl 的 /c 修饰符,那么即使正则表达式匹配失败了,\G 将不会重新设置。下面是一个简单的例子。#!/usr/bin/perlmy $testText =

2012-05-12 20:47:29 1927

原创 局部匹配模式

-- Start在全局匹配模式 一节中我们了解到, 支持正则表达式的工具通常都支持以下几种模式。不区分大小写的匹配模式注释模式单行模式(点号通配模式)多行模式(增强的行锚点模式)文字文本模式但是它们的作用范围都是整个表达式,事实上我们还可以指定局部匹配模式,也就是说它们只对部分子表达式起作用。我们来看如何指定局部匹配模式。不区分大小写的匹配模式

2012-05-12 07:55:23 1668

原创 格式化日期和时间

-- Start预定义格式不同国家和地区显示日期和时间的方式是不同的, 显然格式化日期和时间和本地的语言环境有密切关系. 利用 DateFormat 类提供的方法, 我们可以很容易的将日期和时间格式化成符合本地语言环境的形式.格式化日期下面的例子演示了各个国家和地区是如何显示日期的.public static void main(String[] args) throws Ex

2012-05-11 17:34:39 5145

原创 POSIX 字符组

-- Start什么是 POSIX 呢? POSIX 是 Portable Operating System Interface (可移植操作系统接口) 的缩写,它是一系列标准,确保操作系统之间的移植性。通常支持正则表达式的工具都支持下列 POSIX 字符组。元字符(Metacharacter)匹配(Matches)[[:alnum:]]字母和数

2012-05-10 21:46:58 2172

原创 字符组集合运算

-- Start我们已经知道了什么是字符组,为了使定义字符组更加优雅便利,Java 的字符组支持完整的集合运算(并、补、交),来看下面的例子。[a-d[m-p]] 并集 等同于[a-dm-p][a-z&&[def]] 交集 匹配d, e 或 f[a-z&&[^bc]] 补集 等同于[ad-z]-

2012-05-10 21:10:46 1178

原创 再论点号

-- Start我们已经知道了在正常情况下,点号(.)能够匹配除换行符以外的任何字符。事实上这句话并不准确,确切的说,点号(.)能够匹配除换行符以外的任何单个代码点。由于处于辅助平面内的字符由两个代码点构成,所以,为了匹配这些字符,我们需要两个点号。幸运的是,这些字符我们很少使用,基本上我们可以不考虑。看到这里,如果你此时的想法是 what the hell are you talking

2012-05-09 19:56:05 891

原创 格式化数字和货币

-- Start什么是格式化呢? 所谓的格式化是指套用一定的格式将数字,日期或消息等转换成字符串, 或将具有一定格式的字符串还原成数字或日期. 我们为什么要格式化数字,日期和消息呢? 主要是为了在显示或打印的时候符合本地用户的习惯. 本节我们主要关注如何格式化数字和货币.预定义格式不同国家和地区显示数字和货币的方式是不同的, 显然格式化数字或货币和本地的语言环境有密切关系. 利用

2012-05-09 17:50:03 6693

原创 点号 vs 排除型字符组

-- Start我们已经知道了在正常情况下点号(.)是不能匹配换行符的,为了使点号能够匹配换行符,我们不得不使用工具提供的单行匹配模式。令人高兴的是,我们并非只有一种选择,通常排除型字符组是可以匹配换行符的,我们可以在需要点号匹配换行符的时候采用排除型字符组来替代。#!/usr/bin/perlmy $testText = "I love reg\nular expressions

2012-05-08 21:28:29 1188

原创 控制字符

-- StartASCII 编码共定义了128个字符,其中前32位都是一些控制字符。我们已经知道了如何用 \n 来匹配换行符,除此之外,我们还可以使用 \cJ。#!/usr/bin/perlmy $testText = "I love reg\nular expressions.";if($testText =~ m/reg\cJular/) { print "finds

2012-05-07 21:57:48 2150

原创 十六进制转义

-- Start在八进制转义一节中,我们知道了什么是代码点以及如何在正则表达式中使用八进制代码点。这一节,我们将学习如何在正则表达式中使用十六进制代码点,首先,我们必须知道如何查找一个字符的十六进制代码点。System.out.println(Integer.toHexString('u'));从上面的 Java 代码中,我们可以很容易的知道 u 的十六进制代码点是 75,下面我们看看

2012-05-07 20:30:35 5845

原创 八进制转义

-- Start作为一名程序员,大家都应该知道什么是编码吧。呵呵,其实, 所谓的编码就是字符和数字之间的映射, 我们把这个数字称为代码点或码位。在正则表达式中,我们可以直接使用这个代码点,问题是如何知道一个字符的代码点呢? 呵呵, 很简单,用下面的 Java 代码,我们就可以很容易的知道字符 u 的八进制代码点是 165。System.out.println(Integer.toOct

2012-05-07 20:05:24 3437

原创 元字符终极总结

-- Start字符(Characters)元字符(Metacharacter)匹配(Matches)\aalert警报(\u0007)\eescape Escape字符(\u001B)\fform-feed进纸符(\u000C)\nnewline换行符(\u000A)\

2012-05-06 13:28:06 1837

原创 Java 字符串

-- Start什么是字符串呢? 呵呵, 所谓的字符串就是一串字符的意思. Java 用 char 来表示字符, 那是不是要用 char 数组来表示字符串呢? 如果是那样的话, 我们操作字符串将非常困难, 也不符合面向对象思想. 为此, Java 提供了 String 类来表示字符串, 事实上, 如果你查看String 类的源代码, 你会发现, 在String 类内部就是使用char数组来

2012-05-03 19:42:58 673

原创 Java 日期时间

-- StartJava 使用 Date 类来表示日期和时间, 从 JDK 1.1 开始, Date 类中的大部分方法已经不推荐使用了, 原因是这些方法不能满足国际化的要求. 取而代之的是使用 Calendar 类来对日期进行操作, 使用 DateFormat 类来对日期格式化.我将在下一节为大家介绍有关数字和日期格式化的相关知识, 本节主要关注日期操作. 显然, 为了对日期进行操作,

2012-05-03 14:06:11 2104

原创 全局匹配模式

-- Start不区分大小写的匹配模式我们在忽略大小写匹配一节中介绍了如何在EmEditor中进行忽略大小写匹配,下面我们看一下如何在 Perl 和 Java中进行忽略大小写匹配。Perl 使用 /i 修饰符,Java 使用 Pattern.CASE_INSENSITIVE。#!/usr/bin/perlmy $testText = "I love regula

2012-05-02 21:17:37 3318 1

Korn Shell 精萃

我是一名Java 程序员,在过去的几年中,我偶尔要用ksh 来完成一些工作,由于不经常使用ksh,再加上年岁以高记忆力差,每次写ksh 的时候都需要到处查找样例代码,在经历了无数次这样的事情后,终于痛下决心,将ksh 中最基本的操作写成本书,以便日后查找,如果你也有类似的经历,那么本书不可错过。

2015-12-20

Awk 精萃.pdf

我是一名Java 程序员,在过去的几年中,我偶尔要用awk 来完成一些工作,由于不经常使用awk,再加上年岁以高记忆力差,每次写awk 的时候都需要到处查找样例代码,在经历了无数次这样的事情后,终于痛下决心,将awk 中最基本的操作写成本书,以便日后查找,如果你也有类似的经历,那么本书不可错过。

2015-12-19

Perl 精萃

通过大量的例子介绍了 Perl 的基本用法

2012-09-02

正则表达式精萃

正则表达式精萃 正则表达式 RegEx regular expression

2012-08-18

DB2 SQL 精粹

全面介绍了 DB2 SQL 的使用

2010-05-30

javaMail的使用

用java发mail的例子

2008-03-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除