这里把以前学习Java的笔记整理了发布上来,分为多个系列,后续会发布。

本文分为:

1.Object

2.String和StringBuilder

3.Java中的正则式处理

4.Commons-lang

--------------------------------------------------------------

一、Object

在Java继承结构中,位于最顶端,是被子类默认继承,一切皆对象!

1、toString方法

表示返回对象的字符串,默认返回的格式为“类名@hashCode值”是对象的句柄,但一般是根据具体需要重写该方法,使其返回更有意义的信息。

2、equals方法

用于定义对象的比较规则(对象的相等逻辑)。public boolean equals(Object obj),通常用于引用类型的比较。重写的目的是比较两个对象“长得像不像”。

原形:

public boolean equals(Oject obj){return this==obj}

在比较逻辑中,在比较内容前一定要看两个对象是否是同一类型。

重写我们是看实际定义类的需求,并不是说在比较内时要求所有的属性都相等。


二、String和StringBuilder

1、String

java封装的字符系列,采用unicode编码在内存中存储字符串,任何一个字符都占用2个字符。

特点:字符串是一个不变的对象,对象一旦创建就不会改变。

是引用类型,但是java为使用方便,允许为该引用类型变量赋直接量(字面量)。

String特性(常量池):处于性能考虑,java会将所有出现的字符串缓存在常量池中。

常量池:是JVM用于管理字符串开辟的一段内存空间。这么做,目的是尽最大可能重用字符串。

注:/*** java在编译源程序时,发现运算两次的内容都是字面量时候,会进行优化,

* 直接在编译的过程中就计算了结果,这样避免每次运行是在进行计算减低了性能。

* String str5 = "wor"+"ld";//源程序的样子(.java)

* String str5 = "world";//字节码中的样子(.class)

*/


String重写了Object的equals(),String还提供了equalsIgnoreCase,另外一个比较方法,用于忽略大小写来比较。

equals书写习惯:字面量.equals(变量)。因为如果字面量写在前面即使变量为空也不会出现空指针异常,反之可能会出现异常。

String常用方法:

1)String toLowerCase():返回该字符串的小写形式。

2)String toUpperCase():返回该字符串的大写形式。

3)String trim():返回字符串为原始字符串去掉前导和后继的空白(空格\t\n\r...)。

4)boolean startsWith(String prefix):判断字符串时候否以参数字符串开头。

5)boolean endsWith(String suffix):判断字符串时候否以参数字符串结尾。

6)int length():返回字符串的长度。

7)indexOf方法

用于实现在字符串中检索另外一个字符串,提供了相关重载方法:

int indexOf(String str):在字符串中检索str,返回第一出现的位置,如果没有则返回-1。

int indexOf(String str,int fromIndex):和上一个方法类似,但是是从字符串的fromIndex位置处开始检索。

int lastIndexOf(String str,int from):和indexOf相似,只是在str字符串中多次出现时,返回最后一个出现的位置。

8)charAt方法

char charAt(int index):用于返回字符串指定位置的字符,参数index表示指定的位置。

这里可以运用这个方法来判断一字符串是否是回文,如:

String str = "山西落雁塔雁落西山";

for (int i = 0; i < str.length()/2; i++) {

   if (str.charAt(i)!=str.charAt(str.length()-1-i)) {

       System.out.println("不是回文");

       return;

   }

}

9)substring方法

返回字符串的字串。

String substring(int beginIndex,int endIndex):返回字符串从下标beginIndex(包含)开始到endIndex(不包括)结束的子串。

String substring(int beginIndex):返回字符串从下标beginIndex(包含)开始到结束的子串。

10)getBytes方法

用于获取字符串对应二进制序列。

byte[] getBytes(String charsetName):按照指定编码来获取

byte[] getBytes():按照系统默认编码来获取


补充:

常见编码集

GBK:国标码

GB2312:支持繁体字的国标码

ISO8859-1:欧洲标准

UTF-8:通用的国际编码集


补充:

正则表达式

描述:正则表达式是一串特定的字符,组成一个“规则字符串“,这个规则字符串是描述文本规则的工具,正则表达式就是记录文本规则的代码。

例如:正则式“[a-z]”表示a到z的任意一俄国字符,正则表达式“[a-z]+”表示有一个或多个字符串组成的字符串。

正则式既然是一种字符串组合的规则,那么我们就可以按着规则组合自己想要的正则式。


[]:代表可以出现一个字符

[abc]这个字符可以是a或b或c

[^abc]不能是a或b或c的其他字符

[a-z]这个字符只能是小写字母

[a-zA-Z0-9]可以是字母或数字

[a-z&&[^bc]]是小写字母但不能是b或c

. :任意一个字符

\d:任一一个数字,等同[0-9]

\D:任一一个非数字字符,

等同[^0-9]

\s:任一一个空白字符

\S:非空白字符

\w:单词字符 [0-9a-zA-Z_]

\W:非单词字符[^\w]


量词:

?:表示0-1次

[\w]?:表示0或1个单词字符

[\w][\w]?:表示1或2个单词字符


*:表示0-无穷次

[\d]*:任意次数字

[\d][\d]*:至少一次


+:表示1-无穷次

[\d]+:至少一个数字


{n}:n次.n只能是数字

[\d]{11}:11次数字


{n,}:n次以上

{n,m}:n到m次

[\d]{3,5}:3-5位的数字


():将内容看作一个整体

(abcd):要出现一个abcd

(abcd)+:至少一次abcd

()中可以使用或关系。在几个整体中选其一

(138|135|130):是138或135或130


下面列出常见的正则式:

[abc] a,b,c中任意一个字符

[^abc] 除了a,b,c任意一个字符

[a-z] a~z的任意一个字符

[a-zA-Z0-9] a~z,A~Z,0~9中任意一个字符

[a-z&&[^bc]] a~z中除了b,c以外任意一个字符,其中&&表示“与”的关系。


. 任意一个字符

\d 任意一个数字字符,相当于[0-9]

\D 任意一个非数字字符,相当于[^0-9]

\s 空白字符,相当于[\t\n\x0B\f\r]

\S 非空白字符,[^\s]

\w 任意一个单词字符,[a-zA-Z_0-9]

\W 任意一个非单词字符,[^\w]


X? 表示0个或1个X

X* 表示0个或任意多个X

X+ 表示0到任意多个X(大于等于1个X)

X[n] 表示n个X

X[n,] 表示n到任意多个X(大于等于n个X)

X[n,m] 表示n个到m个X(大于等于n个且小于m个X)


10)split方法

将字符串按照特定的分割符拆分成字符串数组。

String[] split(String regex):参数regex为正则式,以regex所表示的字符串为分割符,将字符串拆分成字符串数组。


11)replace方法

用于字符串的替换操作。

String replaceAll(String regex,String replacement):将字符串中匹配正则表达式regex的字符串替换成replacement。


2、Commons-lang

Commons-lang是Apache Commons项目中的一个组件,针对JDK官方的java.lang包中的类提供了一些使用的补充,运用很广。

StringUtils是commons-lang包中提供的,针对对字符串操作的工具类,该类提供了一系列静态实用方法:

1)String repeat(String str,int repeat):重复字符串若干次。

2)String join(Object[] array,String separator):将一个数组中的元素连接成字符串。

3)String leftPad(String str, int size, char padChar):向左边填充指定字符以达到指定长度。

4)String rightPad(String str, int size, char padChar):向右边填充指定字符以达到指定长度。

实用的方法很多,可以使用的时候去查看相关API。


3、StringBuilder

与String最大的不同就是它封装可变的字符串,而String是不可变的。对象创建后可以通调用方法来改变字符串序列。

它具有的构造方法如下:

public StringBuilder();

public StringBuilder(String str);

StringBuilder提供了append、insert、delete、replace等方法,用于对其封装的字符序列进行追加、插入、删除、替换等操作。


StringBuilder的很多方法返回都是StringBuilder,return this。

在改变之后又返回了该对象的引用。


String, StringBuffer StringBuilder的区别。

String的长度是不可变的字符串。

StringBuffer的长度是可变的字符串,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法。它是线程安全的。

StringBuilder是从 JDK 5 开始,为StringBuffer该类补充了一个单个线程使用的等价类,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。