您的位置:首页 > 编程语言 > Java开发

Java基础:String类

2014-09-15 14:10 218 查看

1.基本描述

String类,StringBuffer类,StringBuilder类是定义在Java.lang包中用于描述字符串这类对象的;
public final class String
String类代表字符串,Java程序中的所有字符串字面值都作为此类的实例对象;
字符串是常量,在创建之后不能更改;String类对象是不可变的,因此可以共享;
字符串缓冲区支持可变的字符串;
字符串存储在内存的方法区,集中在常量池中存储,其数据结构是数组;
String类中的equals方法覆盖了Object类中的equals方法,当两个字符串中的内容相同时,返回true;
String类中的toString方法返回字符串自身;

2.字符串对象的初始化问题

package com.zr.day13;
class StringDemo
{
public static void main(String[] args)
{
String s1 = "abc";
String s2 = new String("abc");
String s3 = "abc";

System.out.println("s1=s2:"+(s1==s2));	//返回false,表示s1和s2分别指向不同的对象;
//s1在内存中对应着一个对象,存在于常量池中的字符串对象;
//s2在内存中对应着两个对象,一个是在堆内存中new出来的对象,另一个是在常量池中的字符串对象
System.out.println("s1=s3:"+(s1==s3));	//返回true,表示s1和s2的引用都指向同一个字符串对象,共享;

System.out.println("s1-equals-s2:"+(s1.equals(s2)));	//返回true
System.out.println("s1-equals-s3:"+(s1.equals(s3)));	//返回true
//String类中复写了Object类中的equals方法;

}
}


3.String类中常见操作

3.1 获取操作

(1).获取字符串中包含的字符数,即字符串长度;

int length();

(2).获取指定位置上的字符,返回指定索引位置的字符;

char  charAt(int index);

要注意避免出现StringIndexOutOfBoundsException;

(3).获取字符或子串在字符串中出现的位置;查找失败时返回-1;

int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引;
int indexOf(int ch, int formIndex):返回在此字符串中从指定索引开始搜索第一次出现指定字符的位置;
int indexOf(String str):返回指定子字符串在此字符串中第一次出现的位置索引;
int indexOf(String str, int fromIndex):从指定位置开始索引,返回子字符串第一次出现的位置索引;

int lastIndexOf(int ch):返回指定字符在此字符串中反向索引第一次出现处的索引;

int lastIndexOf(int ch, int formIndex):返回在此字符串中从指定索引开始反向搜索第一次出现指定字符的位置;

int lastIndexOf(String str):返回指定子字符串在此字符串中反向索引第一次出现的位置索引;

int lastIndexOf(String str, int fromIndex):从指定位置开始反向索引,返回子字符串第一次出现的位置索引;

(4).获取哈希码

int hashCode():复写了Object类中的获取hashCode方法;

3.2 判断操作

(1).字符串是否包含某一子字符串;

boolean contains(String str);
相较于indexOf(Str)方法:该方法也可以索引str第一次出现的位置,因此也可以用来判断是否包含子字符串,既可以判断也可以获取位置;

(2).字符串是否为空;

boolean isEmpty():实际上是在判断字符串的长度是否为0;

(3).字符串是否以指定内容开头;

boolean startsWith(String str):是否以指定前缀开始;
boolean startsWith(String str, int fromindex):从指定索引开始,判断是否以指定前缀开始;

(4).字符串是否以指定内容结尾;

boolean endsWith(String str):是否以指定后缀结束;

(5).字符串内容是否相同;

boolean equals(Object obj):将字符串和指定对象比较;
boolean equalsIgnoreCase(String str):忽略大小写的比较;

3.3 转换操作

(1).将字符数组转换成字符串;

方式一:构造函数;
String(Char[ ] value);
String(Char[ ] value, int offset, int count):该String包含取自字符数组参数的资格子数组的字符;
方式二:静态方法;
static String copyValueOf(Char[ ] data);
static String copyValueOf(Char[ ] data, int offset, int count);
static String valueOf(Char[ ] data);
static String valueOf(Char[ ] data, int offset, int count);

(2).将字符串转换成字符数组;

char[ ] toCharArray():将字符串的字符存储在字符数组中;
void getChars(int  srcbegin, int srcend, char[ ] dst, int dstBeg
1100e
in):将字符从此字符串复制到目标字符数组;

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

构造函数;
String(byte[ ] bytes):使用默认的字符集解码;
String(byte[ ] bytes, Charset charset):可以指定字符集解码;
String(byte[ ] bytes, int offset, int length);
String(byte[ ] bytes, int offset, int length, Charset charset);
String(byte[ ] bytes, String charsetname);
String(byte[ ] bytes, int offset, int length, String charsetname);

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

byte[ ] getBytes():默认字符集将此String编码为byte序列;
byte[ ] getBytes(Charset charset):使用指定的字符集编码;
byte[ ] getBytes(String charsetName);

(5).将基本数据类型转换成字符串;

static String valueOf(boolean b);
static String valueOf(char c);

static String valueOf(double d);

static String valueOf(float f);

static String valueOf(int i);

static String valueOf(long l);

static String valueOf(Object obj);

(6).字符串大小写转换;

String toUpperCase():大写;
String toLowerCase():小写;

3.4 替换操作

String replace(char oldChar, char newChar):字符替换,如果没有oldChar直接返回该字符串的引用;
String replace(String oldStr, String newStr):子字符串替换;
String replaceAll(String regex, String str):用指定字符串替换所有满足正则表达式的子串;
String replaceFirst(String regex, String str):替换第一个满足正则表达式的子串;

3.5 其他操作

(1).切割

String[ ] spilt(String regex);

(2).子串

String subString(int beginIndex);
String subString(int beginIndex, int endIndex);//包含头不包含尾;

(3).去除空格:去除字符串两端空格;

String trim();

(4).比较

int compareTo(String str):按字典顺序比较;
int compareToIgnoreCase(String str):忽略大小写按字典顺序比较;

4.StringBuffer和StringBuilder

4.1 字符串缓冲区

public final class StringBuffer 
public final class StringBuilder
字符串缓冲区,容器,最大的特点是可变长度,可以对字符串内容进行增删;
使用String类操作字符串对象时,每次要连接字符串都要构建新的String对象,既耗时有浪费空间;
还可以直接操作多个数据类型,最后可以通过toString()方法返回其对应的字符串;

4.2 StringBuffer和StringBuilder中的特有操作

(1).存储操作:最后返回的还是这个容器的引用,只是容器中的内容发生了变化;

在容器末尾存储数据:

StringBuffer/StringBuilder append(boolean b);
StringBuffer/StringBuilder append(char c);
StringBuffer/StringBuilder append(char[ ] str);

StringBuffer/StringBuilder append(char[ ] str,int offset,int len):字符数组的指定部分;

StringBuffer/StringBuilder append(String s);
StringBuffer/StringBuilder append(String s, int start, int end):包含头不包含尾;

StringBuffer/StringBuilder append(double d);

StringBuffer/StringBuilder append(float f);

StringBuffer/StringBuilder append(int i);

StringBuffer/StringBuilder
append(long l);

StringBuffer/StringBuilder
append(Object obj);

StringBuffer/StringBuilder
append(StringBuffer sb);

在容器指定位置添加数据:
StringBuffer/StringBuilder
insert(int offset, boolean b);
StringBuffer/StringBuilder
insert(int offset, char c);
StringBuffer/StringBuilder
insert(int offset, char[ ] str);
StringBuffer/StringBuilder
insert(int index, char[ ] str, int offset, int len);

StringBuffer/StringBuilder
insert(int offset, String s);

StringBuffer/StringBuilder
insert(int offset, String s, int start, int end);

StringBuffer/StringBuilder
insert(int offset, double d);

StringBuffer/StringBuilder
insert(int offset, float f);

StringBuffer/StringBuilder
insert(int offset, long l);

StringBuffer/StringBuilder
insert(int offset, int i);

StringBuffer/StringBuilder
insert(int offset, Object obj);

(2).删除操作:

StringBuffer/StringBuilder delete(int start, int end):包含头不包含尾;
StringBuffer/StringBuilder deleteCharAt(int index):删除某个指定的字符;
StringBuffer/StringBuilder delete(0, sb.length()):清空字符缓冲区;

(3).修改操作:

StringBuffer/StringBuildre replace(int start, int end, String str):替换某段子串;

void setCharAt(int index, char ch):修改某个位置的字符;

void setLength(int newLength):设置字符缓冲区的长度;

(4).反转操作:

StringBuffer/StringBuilder reverse();

(5).获取子串:

String subString(int start):获取从指定开头到字符串结尾的子串;
String subString(int start, int end):包含头不包含尾;

(6).获取操作:

char charAt(int index):获取指定位置的字符;

int indexOf(String str):获取指定字符串在字符串中第一次出现的位置;
int indexOf(String str, int fromIndex):从指定位置开始索引;
int lastIndexOf(String str):反向索引;
int lastIndexOf(String str, int fromIndex):反向索引;

4.3 StringBuffer和StringBuilder的比较

StringBuffer:JDK1.0版本开始;线程同步的;多线程中建议使用;
StringBuilder:JDK5.0版本开始;线程不同步;单线程中建议使用,多线程中可以自己添加同步;

5.基本数据类型包装类

(1).将基本数据类型封装成对象,可以使用更多更加丰富的功能,同时还定义了许多字段;

byte——Byte

short——Short

int——Integer

long——Long

boolean——Boolean

float——Float

double——Double

char——Character

(2).基本数据类型和字符串类型之间的转换

基本数据类型转换成字符串类型:
1).基本数据类型值+”“;(使用字符串连接符连接)
2).基本数据类型.toString(基本数据类型值);

eg:Integer.toString(4);

字符串类型转换为基本数据类型:
1).静态调用方式:xxx 变量 = Xxx.parseXxx(str);

eg:int x = Integer.parseInt(str);
这种方式不包括字符数据类型,Character;

2).非静态调用方式:

基本数据类型包装类中提供了一些方法;
eg:Integer i = new Integer(String);

int x = i.intValue();

(3).JDK5.0后出现的新特性:自动装箱和自动拆箱;

Integer i = 4;//自动装箱,Integer i = new Integer(4);
i = i + 3;//自动拆箱,右边 i.intValue() + 3;赋值的时候再装箱;
Integer m = 128;
Integer n = 128;
m==n    //false
Integer m = 127;
Integer n = 127;
m==n    //true
当数值在byte范围内时,对于性特性,如果该数值已经存在,则不会在开辟新的数据空间;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: