TIJ_字符串

来源:互联网 发布:进销存系统数据库设计 编辑:程序博客网 时间:2024/06/06 17:47

String对象是不可变得,String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String。

每当把String对象作为方法的参数时,都会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置上,从未动过。

String类最长用的方法是toString()和append()。

String s1="a";

String s2="b";

String s3="c";

String  s=s1+s2+s3;相当于StringBuilder  sb=new StringBuild();sb.append(s1);sb.appens(s2);sb.append(s3);sb.toString()返回给s。


StringBuilder:是线程不安全的,开销比较小

StringBuffer :线程安全,但是开销大



String类和StringBuffer类主要用来处理字符串,这两个类提供了很多字符串的实用处理方法。String类是不可变类,一个String对象所包含的字符串内容永远不会被改变。

StringBuffer类是可变类,一个StringBuffer对象所包含的字符串内容可以被添加或修改。


String类有一些构造方法:

String( ):构建一个内容为空的字符串“”。

String(String value):字符串参数指定字符串的内容。

String(char[ ]  value):字符数组参数指定字符串的内容。

String(byte[ ]  bytes):根据本地平台默认的字符编码。由字节数组构造一个字符串。

String类有以下常用方法:

length( ):返回字符串的字符个数

char  charAt(int  index):返回字符串中index位置上的字符,其中index的取值范围是0到字符串长度-1。

getChars(int  srcBegin,int  srcEnd,char  dst[ ],int  dstBegin):从当前字符串中拷贝若干字符到参数指定的字符数组dst[ ]中。从srcBegin位置开始取字符,到srcEnd-1位置结束,dstbegin为提取的字符存放到字符数组中的起始位置。如果参数dst为null,则会抛出NullPointerException。

equals(object  str)和equalsIgnoreCase(object  str):判断两个字符串对象的内容是否相同。两个方法区别在于,后者忽略大小写,前者区分大小写。

int  compareTo(String  str):按字典次序比较两个字符串的大小。如果源串较小,则返回小于0的值,相等返回0,否则返回大于0的值。

indexOf( )和lastIndexOf( ):在字符串中检索特定字符或子字符串。前者从首位查找,后者从末尾开始查找。如果找到,就返回匹配成功的位置,如果没找到,就返回-1。

concat(String  str):把参数str字符串附加在当前字符串的末尾。

substring(int  beginIndex):返回字符串的一个子字符串,从参数beginIndex开始到末尾。

substring(int  beginIndex,int  endIndex):返回字符串的一个子字符串,从参数beginIndex开始到endIndex-1结束。

String[ ]  split(String  regex):根据参数regex把原来的字符串分割为几个子字符串。

例如:String  s= “i=j”;

s.split(“=”);//输出结果为ij。

replaceAll(String  regex,String  replacement):把源字符串中的regex替换为replacement。

replaceFirst(String  regex,String  replacement):仅把源字符串中的第一个regex替换为replacement。

trim( ): 把字符串首尾的空格删除。

String  valueOf( ):把基本类型转换为String类型。

toUpperCase( )和toLowerCase( ):前者把字符串字母全部改为大写,后者把所有字符串改为小写。


"hello"与 new  String("hello")的区别

1:String s1=“hello”;String  s2=“hello”

      hello为直接数,Java虚拟机把它作为编译时常量,在内存中只会为它分配一次内存,然后就可以重复使用,因此s1==s2

2:String  s3=new Sting(“hello”);String  s4=new String(“hello”)

     每个new语句都会新建一个String对象,因此s1==s2结果为false。

(Tips:从提高程序性能的角度考虑,减少java虚拟机为对象分配内存及回收内存的次数,可以减轻Java虚拟机的负担,从而提高程序性能。因此如果在编程时就明确知道字符串的内容,应该用字符串直接数来为String类型变量赋值。)


StringBuffer类

构造方法:

StringBuffer( ):建立一个空的缓冲区,默认长度为16

StringBuffer(int length):建立一个长度为length的空缓冲区。

StringBuffer(String str):缓冲区的初始内容为字符串str,并提供了16个字符的空间供再次分配。

StringBuffer类有以下常用方法。

length( ):返回字符串的字符个数,与String类的length( )用法相同。

append( ):向缓冲区内添加新的字符串。

toString( ):返回缓冲区内的字符串。

charAt(int index):返回字符串中index位置的字符。

setCharAt(int index,char  ch):在index位置放置字符ch。

getChars(int  srcBegin,int  srcEnd,char[ ]  dst,int  dstBegin):用法与Sting类的getChars( )方法相同。

substring( ):用法与String类的substring( )相同。

insert(int  offset,String  str):在字符串中的offset位置插入字符串str。



String类和StringBuffer类的不同

1:String类是不可变类,而StringBuffer是可变类。String对象创建后,它的内容无法改变。一些看起来能够改变的字符串的方法,实际上是创建一个带有方法所赋予特性的新字符串,。例如String类的substring( ),concat( ),toLowerCase( ),toUpperCase( )和trim( )等方法都不会改变字符串本身,而是创建并返回一个包含改变后内容的新字符串对象。

     而StringBuffer的append( ),replaceAll( ),replaceFirst( ),insert( )和setCharAt( )等方法都会改变字符缓冲区中的字符串内容。

2:String类覆盖了Object类的equals( )方法,而StringBuffer类没有覆盖Object类的equals( )方法。

3:两个类都覆盖了Object类的toString( )方法,但是各自的实现方式不一样:String类的toString( )方法返回当前String实例本身的引用,而StringBuffer类的     toString( )方法返回一个以当前StringBuffer的缓冲区中的所有字符为内容的新的String对象的引用。

4:String类对象可以用操作符+进行连接,而StringBuffer类对象之间不能通过操作符+进行连接。

(Tips:例如在读取一行文本的情况下,使用StringBuffer可以减少java虚拟机创建String对象的次数,减少动态分配和回收内存的次数,提高程序的性能)

正则表达式


正则表达式用来描述特定的字符串模式,例如表达式   a{3}  表示由三个字符 a 构成的字符串,相当于普通字符串“aaa”。


特殊字符               描述

. 表示任意一个字符

// 反斜杠
/t 间隔 ('/u0009')
/n 换行 ('/u000A')
/r 回车 ('/u000D')

[abc] 表示a  b  c中的任意一个字符

[^abc] 表示除a  b  c以外的任意一个字符

[a-zA-Z] 介于a到z,或A到Z中的任意一个字符

\s 空白符(空格,tab,换行,换页,回车)

\S 非空白符

\d 任意一个数字[0-9]

\D 任意一个非数字[^0-9]

\w 词字符[a-zA-Z_0-9]

\W 非词字符


表示字符出现次数的符号


* 0次或者多次

+ 1次或者多次

? 0次或者1次

{n} 恰好n次

{n,m} 至少n次,不多于m次



0 0
原创粉丝点击