这里把以前学习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 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
转载于:https://blog.51cto.com/huing/1294962