---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
String概述:
String字符串,是java当中最常见的使用对象之一,java把字符串封装成一个类,这个类的定义是:public final classString extendsObject
implementsSerializable,Comparable<String>,CharSequence可以看出这个类不可以有子类,操作字符串的一些方法也不可以被复写,在java中所有的字符串都是他的具体对象。
Java 程序中的所有字符串字面值(如
"abc"
)都作为此类的实例实现。字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。
例如:String s1 = "abc" //s1是一个类类型的变量,"abc"是一个对象
class StringDemo
{
public static void main(String[] args)
{
String s1 = "abc";
String s2 = new String("abc");//在内存中有两个对象
String s3 = "abc";//但是这里s1 == s3为真因为对象的值相同在常量池里面而且不可以改变所以java为节约空间他们指向同一个对象
System.out.println(s1 == s2); //输出false两个变量指向不同的地址
System.out.println(s1.equals(s2)); //输出true,String类复写了object类中的equals方法,用于判断字符串是否相同
}
}
String常见的操作:
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 ch) //返回ch小字符串在字符串中第一次出现的位置
int indexOf(Stringch, int fromIndex) //从fromIndex指定位置开始,获取ch小字符串在字符串中出现的位置
2、判断
1、字符串中是否包含某一个子串 boolean contains(str) 注意indexOf(str)也可以实现这个功能,当字符串中没有这个子字符串时返回-1而且可以获取出现的位置。
2、字符串是否有内容:boolean isEmpty()
3、字符串是否是以指定内容开头:boolean startsWith(str)
4、字符串是否是以指定内容结尾:boolean endsWith(str)
5、判断字符串内容是否相同,复写了object类中的equals方法
6、判断内容是否相同并忽略大小写:boolean equalsIgnoreCase();
3、转换
1、将字符数组转换成字符串:
构造函数:
String(char[]);
String(char[],offset,count)将字符数组中的一部分转换成字符串
2、将字符串转换成字符数组:char[] toCharArray();
3、将字节数组转换成字符串:更改构造函数中的参数就可以了
4、将字符串转换成字节数组:byte[] getBytes();
5、将基本数据类型转换成字符串:static String valueOf(int); static String valueOf(double) //3+""效果一样
4、替换
String replace(oldChar,newChar);方法返回一个新的字符串,不会改变原来的字符串,而且如果要替换的字符不存在,就会返回原字符串
5、切割
String[] split(regex);
6、子串。获取字符串里的一部分
String substring(begin);//从指定位置开始到结尾
String substring(begin,end);//包含头,不包含尾
7、转换、去除空格、比较
1、将字符串转换成大写或小写:String toUpperCase(); String toLowerCase();
2、将字符串两端的多个空格去除:String trim();
3、对两个字符串进行自然数序比较:int compareTo(String)
字符串操作的示例代码:获取字符串中子串的出现次数
class StringTest2
{
public static void main(String[] args)
{
String s1 = "abcabcabcabcabcabcabc";
String s2 = new String("abc");
System.out.println(getSubCount(s1,s2));
}
public static int getSubCount(String str, String key)
{
int count = 0;//记录出现的次数函数最终返回这个值
int index = 0;//记录子串每次在字符串中出现的位置
while ((index=str.indexOf(key)) != -1 )//只要字符串中存在子串(不返回-1)就继续搜寻
{
str = str.substring(index+key.length());//找到一个子串后把出现的位置加上子串的长度的值作为下标的开始继续下次寻找
count++;//进行累加
}
return count;
}
}
StringBuffer:
StringBuffer是一个字符串缓冲区,是一个容器。特点:长度是可变化的、可以字节操作多个数据类型、最终会通过toString方法变成字符串。而且是一个安全的容器,对其操作保持同步
1、存储:
StringBuffer apend();将指定的数据作为参数添加到已有数据的结尾处。方法返回的还是缓冲区对象,和原引用会指向同一个对象
StringBuffer insert(index,数据):将数据插入到index位置
2、删除
StringBuffer delete(start,end):删除缓冲区中的数据包含start不包含end
StringBuffer deleteCharAt(index):删除指定位置的某个字符
3、获取
char charAt(index)
int indexOf(String str)
int lastIndexOf(String str)
String substring(int start,int end)
4、修改
StringBuffer replace(int start, int end, String str) 把start到end(不包含end)之间的字符修改成str
void setCharAt(int index,char ch);
5、反转
StringBuff reverse()
6、将缓冲区中指定的数据存储到指定的字符数组中
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin);dstBegin:目的数组开始位置 此方法同样不包含srcEnd位置的字符
StringBuilder:
在1.5版本以后提供了一个StringBuilder一个与StringBuffer兼容的API,但是不保证同步,该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程的使用,在大多数实现中建议使用此类,通常比StringBuffer要快。
基本数据类型对象包装类:
基本数据类型对象的包装类的新特性:最简单也最常用:基本数据类型+”“
java中共有8种基本数据,因为它们的变量不能当成Object类型的变量所以java提供了包装类概念,就是把这几种基本数据分别定义成类,并且在类中提供操作这种数据的大量方法以及存储此种数据的相关属性,比如Integer类存储了int类型的最大表示值和最小表示值。
基本数据和类的对应关系:除int对应Integer类,char对应character类之外其他的都是基本类型的第一个字母大写。
封装成类之后最常用于基本数据和字符串之间的转换,常见的转换方法:
基本数据类型转换成字符串:
基本数据类型.toString(基本数据类型值); 如:Integer.toString(34) //将int 34转换成String "34"
字符串转基本数据类型:
我们平时需要使用数值进行运算的时候,获取的通常都是字符串,所以检查需要进行转换
//字符串转int和long
long x = Long.parseLong("123");
int num = Integer.parseInt("123");
注意: 在转换过程中如果传入的参数不是数字格式的字符会抛异常
进制转换:
十进制转换成其他进制:toBinaryString(); toHexString(); toOctalString();
其他进制转成十进制:Integer.parseInt(String s, int radix); 按照制定的radix进制转换s成10进制的表示值
在jdk1.5之后支持自动装箱和拆箱:就是可以把一个基本数据直接赋给基本数据类型对象,并支持对象和基本数据的运算比如:
但是需要特别注意的是Integer类型是可以赋null值的,当时null初值的时候是不可以直接运算的,否则会抛空指针异常。Integer x = 4; //自动装箱=Integer x = new Integer(4); //并且支持拆箱直接运算: x = x + 2; //自动拆箱成int和2进行加法运算,然后装箱赋给x
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------