Java基础5——字符串

1、String类

(1)构造字符串

    String类是一个预定义的类,用来存放字符串。String对象一旦创建,内容不能再改变,但是String变量可以指向另外的字符串。

    String s1="Java";//字符串直接量看作String对象

    String s2="Java";// Java虚拟机为了提高效率并节约内存,如果发现该字符串直接量已经存在于常量池,就不会再开辟空间,s1==s2,true

    String s3=new String("Java");//s1==s3,false

    从控制台读取字符串Scanner对象的next()方法,以空白字符结束,nextLine()读取一整行文本,回车为结束标志。

(2)获取

    对实例方法,s2也可以直接替换为字符串直接量。

方法

功能

备注

s2.length()

字符数,即字符串长度

带(),数组的length是属性

s2.charAt(index)

指定位置的字符

第一个下标值是0

s2.substring(beginIndex,

<endIndex>)

从beginIndex到结尾或

endIndex-1的子字符串

s2.split(regex)

将字符串分段

返回字符串数组

s2.concat(s1)

将s2和s1连接,

返回新字符串。等价于s2+s1,+连接至少有一个变量是字符串,+=也可以连接字符串

s2.indexOf(ch)

第一个ch字符的下标

在ch或s后加,fromIndex,表示在fromIndex之后或之前出现的第一个或最后一个下标。

如果没有匹配的,返回-1。

s2.indexOf(s)

第一个s字符串的下标

s2.lastIndexOf(ch)

最后一个ch字符的下标

s2.lastIndexOf(s)

最后一个s字符串的下标

(3)判断和比较

方法

功能

备注

s2.equals(s1)

相等则返回true

==判断二者是否指向同一对象

s2.equalsIgnoreCase(s1)

相等则返回true,不区分大小写

s2.compareTo(s1)

s2是否大于、等于或小于s1,返回整数

依据s1和s2第一个不同的字符之差得出的

s2.compareToIgnoreCase(s1)

s2.startsWith(prefix)

以特定前缀开始,返回true

s2.endsWith(suffix)

以特定后缀结束,返回true

s2.contains(s1)

s2包含s1,返回true

IndexOf也可用于判断

(4)转换

功能

方法

备注

字符数组->

字符串

new String(char[])

new String(char[],offset,count)

构造函数

String.copyValueOf(char[])

String.copyValueOf(char[],offset,count)

静态方法

String.valueOf(char[])

静态方法

字符串->

字符数组

s2.toCharArray()

s2.getChar(begin,end,s1,s1begin)

将s2子串复制到s1

数值->

字符串

String.valueOf(char/boolean/int/long

/float/double)

重载,静态方法

数值+””

字符串->

数值

Integer.parseInt(s2)

Integer.parseDouble(s2)

如果不是数值型字符串,

将导致运行时错误。

方法

描述

注意

s2.toUpperCase()

将其中所有字母大写

s2.toLowerCase()

将其中所有字母小写

s2.trim()

去掉两边的空白字符

空白字符包括

‘ ’、\t、\f、\r、\n

注:均返回新字符串

(5)替换

方法

功能

s2.replace(tar,rep)

将字符串中匹配的所有字符(串)替换为新字符(串)

s2.replaceFirst(regex,rep)

将字符串中满足正则表达式要求的第一个或每个字符串替换为rep

s2.replaceAll(regex,rep)

注:均返回新字符串

2、正则表达式

    正则表达式用特定符号组成的字符串表示代码操作,是用来处理字符串的强大工具。简化对字符串的复杂操作,但符号定义越多,正则越长,阅读性越差。

分类

正则表达式

匹配

字符

x

单个字符,包括转义字符

.

任意单个字符

字符类

[abc]

a、b或c

[a-z]

a到z

(ab|cd)

ab或cd

[a-z[m-p]]

a到e或m-p(并集)

[a-e&&[c-p]]

a-e与c-p的交集

[^abc]

除a、b、c以外的任意字符

预定义字符类

一般\\

\d

[0-9]

\D

[^0-9]

\s、\S

空白字符[\t\n\x0B\f\r]

\w、\W

单词字符[a-zA-Z_0-9]

贪婪量词

X?

一次或一次也没有

X*

零次或多次

X+

一次或多次

X{n}

恰好n次

X{n,}

至少n次

X{n,m}

至少n次,不超过m次

(1)正则表达式举例

    "[1-9][0-9]{4,14}"  "1[358]\\d{9}" “[a-zA-Z_$][\\w$]*”

    多个空格 " +"   反斜杠 "\\\\"   叠词 "(.)\\1+"

    {}:某规则出现的次数;

    []:一个[]对应一个字符;

    ():为了可以让规则的结果被重用,将规则封装成组()。组有编号,从1开始,想要使用已有组,通过\<组编号>获取。((())())按左括号看编号。

(2)匹配:String类中的booleanmatches(regex)

    用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。

(3)切割:String[]split(regex)

(4)替换:StringreplaceAll(regex,replacement)

    $:用于组替换,如str.replaceAll(“(.)\\1+”,”$1”); 把重叠的字符替换成单个字符,$1即拿前面规则的第一个组。

(5)获取:将字符串中符合规则的子串取出。

    java.util.regex包中有两个类,Pattern和Matcher。Pattern类可以描述正则表达式,一个正则表达式是字符串形式,须首先将它创建为Pattern类对象,然后该对象可以用于创建Matcher对象,Matcher类通过解释Pattern对字符串执行匹配操作。

    String类中的matches、replaceAll等方法用Pattern和Matcher对象来完成,只不过被String方法封装后,用起来相对简单,功能却单一。想要用到复杂功能得回来调用Mathcher中的方法,还有更多方法String没有封装过。

    应用:网页爬虫(蜘蛛)。

import java.util.regex.*;
public class RegexDemo
{
	public static void main(String[] args) 
	{
		getDemo();
	}

	public static void getDemo()
	{
		String str="ming tian jiu yao fang jia le ,da jia";

		String reg="\\b[a-z]{4}\\b";//仅有三个字母的单词,\b单词边界

		//1、将正则表达式封装成对象
		//static Pattern compile(String regex)
		//没有对象中特有数据,所以声明为静态方法,返回本类对象
		Pattern p=Pattern.compile(reg);

		//2、让正则对象和要作用的字符串相关联,获取匹配器对象
		//Matcher matcher(CharSequence input)
		Matcher m=p.matcher(str);

		//3、关联后,获取正则匹配引擎
		//4、通过引擎对符合规则的子串进行操作,比如取出
		while(m.find()){//将Pattern规则作用于字符串,查找匹配的下一个子序列
			System.out.println(m.group());//获取匹配后得到的子序列
			System.out.println(m.start()+"..."+m.end());
			//int start()  返回第一个匹配字符的下标
			//int end()  返回最后匹配字符之后的偏移量
		}
		System.out.println(m.matches());//false,因为下标已经增加到最后
	}
}

3、StringBuilder和StringBuffer类

    StringBuffer是字符串缓冲区,是一个容器,容器的操作包括Ccreate、U update、R read、D delete。与String类和数组相比,长度可变。

    StringBuilder是一种可变字符序列,提供与StringBuffer兼容的API,但不保证同步,用于字符串缓冲区被单线程使用时。建议使用StringBuilder,因为它效率更高。

    二者的构造方法和其它方法几乎完全一样。

(1)添加

    StringBuilder append(数据):将指定数据添加至已有数据结尾处,返回原缓冲区对象。

    StringBuilderinsert(index,数据):将数据添加至指定位置,原有数据顺延。

(2)删除

    StringBuilderdelete(start,end):删除缓冲区数据,包含头,不包含尾。

    //sb.delete(0,sb.length()):清空缓冲区

    StringBuilderdeleteCharAt(index):删除指定位置字符

(3)获取:与String类似

    int length()

    char charAt(index)

    Stringsubstring(start,end):注意返回String类型

    int indexOf(String str)    int lastIndexOf(String str)

(4)修改

    StringBuilderreplace(start,end,str)

    voidsetCharAt(index,ch)

(5)反转

    StringBuilderreverse()

(6)其它方法

    String toString():从字符串缓冲区返回一个字符串对象。

    void getChars(srcBegin,srcEnd,char[] dst,dstBegin):将缓冲区中指定数据存储至数组中。

    int capacity():字符串缓冲区的容量。

    void setLength(newLength):设置字符串缓冲区的长度,如果比之前的长度长,添加空字符’\u0000’。

    void trimToSize():将容量降到实际大小。

4、基本数据类型对象包装类

    通过使用包装类(java.lang包),将基本数据类型作为对象处理。大多数基本数据类型名称与其包装类名称相同,Integer和Character例外。

(1)构造包装类newInteger(5); 或new Integer(“5”);或Integer.valueOf(“5”);

(2)MAX_VALUE、MIN_VALUE:类变量,获取最大值或最小(正)值。

(3)基本数据类型和字符串转换

    Integer.toString(66);//等于66+””,将基本数据类型转换为字符串

    inta=Integer.parseInt(“123”,<radix>);//将字符串转换为基本数据类型,Character没有该方法;可以指定该字符串的进制,实现其它进制转十进制。

    Integer i=new Integer(“123”);

    intnum=i.intValue();//与parse的区别仅有非静态、静态之分

(4)十进制转换其它进制

    Integer.toBinaryString(10);

    Integer.toHexString(10);

    Integer.toOctalString(10);

(5)compareTo//比较两个数值大小,返回1、0、-1

(6)Integerx=4;//自动装箱

    x=x+2;//自动拆箱,x.intValue(),新特性健壮性稍差,需要先检查x!=null

(7)Integera=128;  Integer b=128;  //a==b,false

    Integer m=127;  Integer n=127;  //m==n,true

    当数值在byte范围内,如果该数已经存在,则不再开辟新空间。

猜你喜欢

转载自blog.csdn.net/yaocong1993/article/details/80064466