java----String类

String类
一、String
字符串:字符串是一个特殊的对象,一旦初始化就不可以被改变。
疑问
String s2 = "abc";
String s1 = new String("abc");
有什么区别?
验证
class Demo
{
	public static void main(String args[]){
		String s1 = "abc";
		String s2 = new String("abc");
		System.out.println(s1==s2);
		System.out.println(s1.equals(s2));
	}
}

:String s1 = "abc";s1指向对象"abc",String s2 = new String("abc");s2新开辟了空间用于存储"abc"对象的地址。所以s1s2两者的地址是不同的。所以s1==s2false
疑问为什么说字符串一旦被初始化就不可以被改变?
class Demo
{
	public static void main(String args[]){
		String s1 = "abc";
		s1 = "kk";
		System.out.println(s1);
	}
}
s1原来指向"abc",后来指向了"kk"。这一过程只是指向改变了,而对象"abc"依然还在,等待被垃圾回收机制回收。
""null的区别:""是一个对象,null是空。
常见的字符串操作
1.获取
字符串中包含的字符数,也就是字符串的长度。
int length();
根据位置获取位置上的某个字符。
char charAt(int index);
根据字符获取该字符在字符串中的位置。
int indexOf(int ch);//返回的是ch在字符串中第一次出现的位置
详情查看API文档
boolean contains(CharSequence s);
:当访问到字符串中不存在的角标时,会发生StringIndexOutOfBoundsException字符串角标越界异常。
class Demo
{
	public static void main(String args[]){
		String s = "abc";
		System.out.println(s.charAt(10));
	}
}

如果没有找到则返回-1(可用于判断是否存在)。
2.判断
判断字符串中是否包含某一个子串。
boolean contains(CharSequence s);
判断字符串中是否有内容。
boolean isEmpty();
判断字符串是否以指定内容开头。
boolean startsWith(String prefix);
判断字符串是否以指定内容结尾。
boolean endsWith(String suffix);
判断字符串内容是否相同,复写了Object类中的equals方法。
boolean equals(Object anObject);
判断内容是否相同,并忽略大小写。
boolean equalsIgnoreCase(String anotherString);
class Demo
{
	public static void main(String args[]){
		String s = "ArrayDemo.java";
		//判断文件名称是否是Array开头。
		System.out.println("是否是Array开头:"+s.startsWith("Array"));
		//判断文件类型是否是.java文件。
		System.out.println("是否是.java文件:"+s.endsWith(".java"));
		//判断文件名是否包含Demo。
		System.out.println("是否包含Demo:"+s.contains("Demo"));
	}
}

3.字符串转换
将字符数组转成字符串。
String valueOf(char[] data);//返回 <code>char</code> 数组参数的字符串表示形式。
String valueOf(char[] data, int offset, int count);//返回 char 数组参数的特定子数组的字符串表示形式。
静态方法:
static String copyValueOf(char[] data);返回指定数组中表示该字符序列的 String。 
static String copyValueOf(char[] data, int offset, int count);返回指定数组中表示该字符序列的 String。 
基本数据类型转成字符串。
static String valueOf(int i);返回 int 参数的字符串表示形式。 
static String valueOf(double d);返回 double 参数的字符串表示形式。
将字节数组装成字符串。
String(byte[] bytes);通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
将字符串转成字符数组。
char[] toCharArray();将此字符串转换为一个新的字符数组。 
字符串转成字节数组。
byte[] getBytes();使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
:字符串和字节数组在转换过程中,是可以指定编码表的。
4.替换
替换指定字符串。
String replace(char oldChar, char newChar);返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 
class Demo
{
	public static void main(String args[]){
		String s1 = "hello java";
		String s2 = s1.replace("a","n");
		System.out.println(s1);
		System.out.println(s2);
	}
}

分析:s1不变,因为字符串一旦被初始化,就不能再改变。如果要替换的字符串不存在,返回的还是原串。
5.切割
切割字符串。
String[] split(String regex);根据给定正则表达式的匹配拆分此字符串。
6.子串获取字符串中的一部分
子串获取字符串中的一部分。
String substring(int beginIndex);返回一个新的字符串,它是此字符串的一个子字符串。 
String substring(int beginIndex, int endIndex);返回一个新字符串,它是此字符串的一个子字符串(包含头,不包含尾)。 
:如果角标不存在,会发生StringIndexOutOfBoundsException字符串角标越界异常。
7.转换去除空格比较
大小写转换。
String toLowerCase();使用默认语言环境的规则将此 String 中的所有字符都转换为小写。 
String toUpperCase();使用默认语言环境的规则将此 String 中的所有字符都转换为大写。 
去除空格。
String trim();返回字符串的副本,忽略前导空白和尾部空白。 
对两个字符串进行自然顺序的比较。
int compareTo(String anotherString);按字典顺序比较两个字符串。 
int compareToIgnoreCase(String str);按字典顺序比较两个字符串,不考虑大小写。
二、StringBuffer
StringBuffer:字符串的组成原理就是通过该类实现的,StringBuffer可以对字符串的内容进行增删。StringBuffer是一个容器,很多方法与String相同,StringBuffer是可变长度的,是一个字符串缓冲区。
1.存储。
StringBuffer append(char c);将 char 参数的字符串表示形式追加到此序列。
StringBuffer insert(int offset, char[] str);将 char 数组参数的字符串表示形式插入此序列中。
class Demo
{
	public static void main(String args[]){
		StringBuffer sb = new StringBuffer();
		//方法链调用。因为append()方法返回的还是本类对象,所以可以继续调用。
		sb.append("abc").append("def").append("ghi").append("jkl");
		System.out.println(sb);
	}
}
2.删除。
StringBuffer delete(int start, int end);移除此序列的子字符串中的字符。
StringBuffer deleteCharAt(int index);移除此序列指定位置的 char。 
3.获取
char charAt(int index);返回此序列中指定索引处的 char 值。 
int indexOf(String str);返回第一次出现的指定子字符串在该字符串中的索引。
int lastIndexOf(String str);返回最右边出现的指定子字符串在此字符串中的索引。
int length();返回长度(字符数)。 
String substring(int start, int end);返回一个新的 String,它包含此序列当前所包含的字符子序列。 
4.修改
StringBuffer replace(int start, int end, String str);使用给定 String 中的字符替换此序列的子字符串中的字符。 
void setCharAt(int index, char ch);将给定索引处的字符设置为 ch。 
5.反转
StringBuffer reverse();将此字符序列用其反转形式取代。 
三、 StringBuild
StringBuild:JDK1.5版本之后出现了StringBuild。与StringBuffe区别在于StringBuffer是线程同步的。而StringBuild是线程不同步的。
开发建议:单线程使用StringBuild,多线程使用StringBuffer
关于Java升级的三要素:提高效率;简化书写;提高安全性。
、基本数据类型对象包装类
byte----------------------------Byte
short--------------------------Short
int------------------------------Integer
long---------------------------Long
boolean----------------------Boolean
float---------------------------Float
double-----------------------Double
char--------------------------Charcter
作用:基本数据类型对象包装类的最常见作用,就是用于基本数据类型和字符串类型之间做转换。
基本数据类型转成字符串
1.基本数据类型+"";
2.基本数据类型.toString();
字符串转成基本数据类型
XXX a = XXX.parseXxx(String);
static int parseInt(String s);将字符串参数作为有符号的十进制整数进行解析。
十进制转成其他进制
static String toBinaryString(int i);以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
static String toHexString(int i);以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。
static String toOctalString(int i);以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。
其他进制转十进制
static int parseInt(String s, int radix);使用第二个参数指定的基数,将字符串参数解析为有符号的整数。
:1.5版本之后出现的新特性。
class Demo
{
	public static void main(String args[]){
		Integer x = new Integer("123");
		Integer y = new Integer(123);
		System.out.println(x==y);
		System.out.println(x.equals(y));
	}
}

分析:说明"123"是被转成int型后存储的,所以equals时才会为true
class Demo
{
	public static void main(String args[]){
		Integer x = 4;
		x = x+2;
		System.out.println(x);
	}
}

分析:在给x赋值的时候,对4进行了自动装箱成Integer。x+2的时候4拆箱成int(其实是省略了x.intValue()),相加后又装箱成Integer赋给x
class Demo
{
	public static void main(String args[]){
		Integer x = null;
		x = x+2;
		System.out.println(x);
	}
}

分析:之所以出现空指针异常,空对象调用了自动拆箱的 intValue();方法。
class Demo
{
	public static void main(String args[]){
		Integer a = 128;
		Integer b = 128;
		
		Integer m = 127;
		Integer n = 127;
		
		System.out.println("a==b:"+(a==b));
		System.out.println("m==n:"+(m==n));
	}
}

分析:出现这种情况是因为数值如果在byte范围内,对于新特性,如果数值已经存在,则不会再开辟新的空间。而128超出了byte的范围,超出的会另外存储。所以说就不会相等了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值