黑马程序员:Java中的字符串

来源:互联网 发布:买个域名可以不备案吗 编辑:程序博客网 时间:2024/05/23 19:17

------- android培训、java培训、期待与您交流! ----------



一、String

字符串是一个特殊的对象。
字符串一旦初始化就不可以被改变。

创建字符串:

String str = "abc";
String str1 = new String("abc“);
两者的区别;str在内存中有一个对象,str1在内存中有两个对象。

二、字符串中的方法

1、获取


1)字符串中包含的字符数,也就是字符串的长度:

int length();

2)根据位置获取位置上的字符:

char charAt(int index);

3)根据字符获取该字符串的位置:

int indexOf(int ch); //返回的是ch在字符串中第一次出现的位置
int indexOf(int ch,int fromIndex);//从fromIndex指定的位置开始,获取ch在字符串中出现的位置。

int indexOf(String str); //返回的是str在字符串中第一次出现的位置
int indexOfString str,int fromIndex);//从fromIndex指定的位置开始,获取str在字符串中出现的位置。

2、判断

1)字符串中是否包含一个子串。

boolean contains(str);

2)字符串中是否有内容。

boolean isEmpty();

3)字符串是否是以指定内容开头。

boolean startWith(str0;

4)字符串是否是以指定内容结尾。

boolean endsWith(str);

5)判断字符串中的内容是否相同,并忽略大小写

boolean  equalsIgnoreCase();
例;

3、字符串的转换

1)将字符数组转换成字符串

构造函数;String (char[])
String(char[],offset,count);//将字节数组中的一部分转换成字符串
静态方法:
static  String copyValueOf(char[] data,int offset, int count);
static String copyValueOf(char[]);
static  String valueOf(char[]);

2)讲字符串转换成字符数组

char[] toCharArray();

3)将字节数组转换成字符串

String (byte[]);
String(byte[],offset,count);

4)将字符串转换成字节数组

byte[] getBytes();

5)将基本类型转换成字符串

static String valueOf(int);
static String valueOf(double);
特殊:字符串和字符数组转换过程中,是可以指定编码表的。

4、替换

String replace(oldchar,newchar);//如果替换的字符串不存在,返回的还是原字符串

5、切割

String[] split(regex);

6、子串,获取字符串中的一部分

String sunstring(begin);//从指定位置开始到结尾,如果不存在,会出现字符串角标异常。
String substring(begin,end);

7、转换,去空格,比较

1)将字符串转换成大写或小写

String toUpperCase();
String toLowerCase();

2)将字符串两端的多个空格去除。

String trim();

3)对两个字符串进行自然顺序比较。

int compareTo(string); 

练习;获取一个字符串在另一个字符串中出现的次数

package com.java;/** *  * @author wangxuan * 获取一个字符串在另一个字符串中出现的次数 * */public class StringTest {/** * @param args */public static int getsubCount(String string,String key){int count = 0;int index = 0;while((index=string.indexOf(key))!=-1){sop("string="+string);string=string.substring(index+key.length());count++;}return count;}public static void sop(Object obj){System.out.println(obj);}public static void main(String[] args) {// TODO Auto-generated method stubString string = "qweeeertyuiopasdfghjklzxcvbnm";sop("count="+getsubCount(string, "ee"));}}

输出结果为:
string=qweeeertyuiopasdfghjklzxcvbnm
string=eertyuiopasdfghjklzxcvbnm
count=2

三、StringBuffer

StringBuffer 是字符串缓冲区,是一个容器。
StringBuffer类的构造方法

1)StringBuffer()

使用该无参数的构造方法创建一个StringBuffer对象,分配给该对象的实体的初始容量可以容纳16个字符,当该对象的实体存放的字符序列的长度大于16时,实体的容量自动增加,以便存放增加的字符。

2)StringBuffer(int size)

使用该构造方法创建一个StringBuffer对象,指定实体的初始容量为参数size指定的字符个数,当实体存放的字符序列的长度大于size时,实体的容量自动增加,以便存放所增加的字符。

3)StringBuffer(string s)

使用该构造方法创建一个StringBuffer对象,指定配实体的初始容量为参数字符串s的长度再加16个字符。当该对象的实体存放的字符序列的长度大于size时,实体的容量自动增加,以便存放增加的字符。

StringBuffer类常用的方法

1)append

将其他java类型数据转换成为字符串后再追加到StringBuffer对象中。

2)char charAt(int n)

得到参数n指定的位置上的单个字符。当前对象实体中的字符串序列的第一个位置为0,第二个位置为1,以此类推。n的值必须是非负的一个数。

3)void setCharAt(int n,char ch)

将当前StringBuffer对象实体中的字符序列位置n处的字符用参数ch指定的字符替换。n必须是非负的,并且小于当前字符串长度。

4)StringBuffer insert(int index,String str)

insert方法将一个字符串插入实体中,并返回当前对象的引用。

5)public StringBuffer reverse()

StringBuffer对象使用reverse()方法将该对象实体中的字符序列翻转,并返回当前对象的引用。

6)StringBuffer delete(int startIndex,int endIndex)

从当前StringBuffer对象实体中的字符序列中删除一个子序列,并返回当前对象的引用。startIndex指当前需删除的第一个字符下标,endIndex指定需删除的最后一个字符的下一个字符的下标。需要删除的子字符串从startIndex到endIndex-1。

7)StringBuffer replace(int startIndex,int endIndex,String str)

将当前StringBuffer对象实体中的字符序列的一个子序列用参数str指定的字符串替换。被替换的子序列由下标startIndex和endIndex指定,即从startIndex到endIndex-1的序列被替换。该方法返回StringBuffer对象的引用。
例:
package com.java;public class StringBufferDemo {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubStringBuffer stringBuffer= new StringBuffer("hello world");stringBuffer.insert(0, "java:");stringBuffer.setCharAt(10, ',');System.out.println(stringBuffer);stringBuffer.append("!");System.out.println(stringBuffer);stringBuffer.reverse();System.out.println(stringBuffer);}}

输出结果为:
java:hello,world
java:hello,world!
!dlrow,olleh:avaj

四、StringBuilder

此类提供一个与StringBuffer兼容的API。
与StringBuffer的不同之处;
StringBuffer是线程同步,线程安全的。
StringBuilder是线程不同步的,线程不安全的。

多线程用StringBuf,单线程用StringBuilder




0 0
原创粉丝点击