------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
String类
一、特点:
1、String是一种特殊的数据类型,可创建对象。
2、通过String创建的对象分别可存在于字符串池(StringPool)和堆内存中
3、String是一个final的类型,即不可被继承修改,一经初始化就终生不可改变。(要改变也是改变的引用变量)
4、StringPool中的数据可共享,即两个引用变量可指向同一个字符串池中的字符串
5、Java中的任何对象都可写成字符串的形式。
二、字符串方法:
一)字符串的获取:
以 String str = “Hellow java”;为例
1、int length() ---> length方法返回给定字符串的长度:
例如: str.length();//值为11
2、 char charAt(int index) ---> 根据位置获取某个字符串
例如: char c = str.charAt(4);//结果为 o
2、 int indexOf(int ch) ---> 根据字符串获取该字符在字符串中的位置。返回字符串中第一次出现的位置。
例如: int x = str.indexOf(‘j’);//结果为7
int indexOf(int ch,int fromIndex) ---> 从fromIndex指定位置开始。获取在字符串中的位置。
例如: int x = str.indexOf("w",3);//结果为5
int y = str.indexOf("f",3);//结果为-1,没有找到
注:int indexOf(String str)和int indexOf(String str,int fromIndex)同上,只是接收的是String类型的数据。(方法重载)
当访问到字符串中不存在的角标时,会发生StringIndexOutOfBoundsException的角标越界的错误。如果未找到则返回-1,下同。
3、 int lastIndexOf(int ch) ---> 反向索引一个字符出现的位置,此位置的角标仍为从左数的角标。
例如: int m = str.lastIndexOf("v");//结果为9
二)字符串的判断:
以String str = "StringDemo.java"; String s = "StringDemo.java";为例:
1、 boolean contains(str) ---> 判断字符串中是否包含一个子串
例如 boolean b1 = str.contains("Demo");//结果为true
2、 boolean isEmpty() ---> 判断字符串中是否有内容,原理就是判断字符串长度是否为0:
例如 boolean b2 = str.isEmpty();//结果为true
3、 boolean startWith() ---> 判断字符串是否以指定内容开头:
例如 boolean b3 = str.startWith("String");//结果为true
4、 boolean endWith() ---> 判断字符串是否以指定内容结尾:
例如 boolean b4 = str.endWith(".java");//结果为true
5、 boolean equals() ---> 判断两个字符串的内容是否相同:
例如 boolean b5 = str.equals(s);//结果为true
注:判断字符串内容是否相同,是复写了Object类中的equals的方法,是区分大小写的。
6、 boolean equalsIgnoreCase() ---> 判断两个字符串的内容是否相同,忽略大小写:
例如 boolean b5 = str.equalsIgnoreCase("STRINGdEmo.JAVA");//结果为true
三)字符串的转换:
例子:char[] arr = {'a','b','c','d','e','f','g','h'};
String str = "Hello java";
1、将字符数组转化成字符串:
构造函数:String(char[]) 及 String(char[] ch,int offset,int count)
例如 String s = new String(arr);//结果为:s = abcdefgh
String st = new String(arr,1,3);//结果为:st = bcd
2 、char[] toCharArray() ---> 将字符串转化成数组:
例如 char[] ch = str.toCharArray();//结果为:ch = {'H','e','l','l','o',' ','j','a','v','a'}
3、字符串和字节数组间的转换,同1和2,参数为byte[]型值。
String(byte[] b);和String(byte[] b,int offset,int count)
byte[] getByte[] ---> byte[] b = str.getByte();
4、static String valueOf(3) ---> (专业写法)将基本数据类型转换成字符串:
例如 String.valueOf(3);//结果为:"3"
非专业写法:3+""
四)字符串的“更改”:
以String s = " Hello Java ";为例:
1、String replace(oldchar,newchar) ---> 字符串的替换:
例如 str.replace("Java","World");//结果为:s1 = " Hello World "
str.replace('a','n');//结果为:s1 = " Hello Jnvn "
注:如果要替换的字符不存在,则返回原串。
2、String toUpperCase() 和 String toLowerCase() ---> 将字符串转为大写或小写:
例如 str.toUpperCase();//结果为:" HELLO JAVA "
str.toLowerCase();//结果为:" hello java "
3、String trim() ---> 将字符串两端的多个空格去掉:
例如 str.trim();//结果为:"Hello Java"
4、String[] split(regex) ---> 字符串的切割:
以String str = "zhangsan,wangwu,lisi,xiaohei";为例
例如 String[] s = str.split(",");//结果为:s = {"zhangsan","wangwu","lisi","xiaohei"}
5、int compareTo(String str) ---> 对两个字符进行自然顺序的比较:
例如 String s1 = "abc"; String s2 = "aaa";
int n = s1.compareTo(s2);//结果为:n = 1
五)substring(int a,int b) ---> 获得字符串的子串:
String类的方法substring可以从一个较大的字符串提取出一个子串。
方法的中a和b分别代表获取的字符串的起始位置(从哪个位置开始获取,包含此位置)和终止位置(不包括b),获得s.substring(a,b)的长度是b-a。
例如 String s = "adflkwefnkl";
获取子串--从指定位置到结尾:s.substring(2)//结果为:"flkwefnkl"
获取从指定位置到另一位置: s.substring(2,4));//结果为:"fl" --->包含头,不包含尾
四、构造字符串
在这里以StringBuilder为例,在穿插着说一下StringBuffer。
1、概述:
上面也提到了:按键或者来自文件中的单词。采用字符串连接的方式达到此目的的效率是十分低的,每次连接字符串,都会构建一个新的String对象,既降低了效率,又占用大量的空间。通过使用StringBuilder类局可以避免这个问题。另外,在构建字符串时就调用toString方法,可以得到一个String对象。
StringBuilder作为一个容器,是被final修饰的,它是字符串缓冲区,可以对这个“容器”进行“CURD”操作,即存储(creat),修改(update),获取(read),删除(delete)。
这里需要说明的一点是:StringBuilder是在JDK1.5之后才出来的,相对于StringBuffer的效率要高。因为可以不用每次判断锁。虽然不安全,但是效率更高,建议开发使用StringBuilder。StringBuilder和StringBuffer的对比:
----StringBuilder:是线程不同步的,相对效率更高,但是不安全
----StringBuffer: 是线程同步的,相对效率较低,但安全。
2、构建格式:
StringBuilder bul = new StringBuilder();
3、特点:
第一、StringBuilder的长度是可变的,也可以通过length()的方法求当前对象的长度。
第二、可以直接操作多个数据类型。可将如int、double、char、boolean等类型的数据作为字符串相连接存入容器中。
第三、最终会通过toString方法变为字符串。
4、StringBuilder的操作方法:
4.1 append() ---> 存储
StringBuilder append(); ---> 如果要在字符串中“添加”一些内容,则可以使用append方法。可以将制定数据作为参数添加到已有数据的结尾处。
注:方法调用连 -----> 一连调用方法,返回的还是对象。如:
str.append("abc").append(true).append(123).append(20.6);//值为:“abctrue12320.6”
StringBuilder insert(index,数据) ---> 将数据插入到指定index位置
例如 StringBuilder bul = new StringBuilder("adflkwefnkl");
bul.insert(1,"qq");//结果为:"aqqdflkwefnkl"
3.2 delete() ---> 删除
StringBuilder delete(start,end) :删除缓冲区中的数据,包含start,不包含end
例如 StringBuilder bul = new StringBuilder("adflkwefnkl");
bul.delete(1,3);//结果为:"alkwefnkl"
bul.delete(0,bul.length());//清空缓存区,bul为""
bul.deleteCharAt(2);//结果为:"adlkwefnkl"
3.3 获取: char charAt(int index) ---> 获取指定位置index上的字符
int indexOf(String str) ---> 获取指定字符串的位置
int lastIndexOf(String str) ---> 反向获取指定字符串的位置
int length() ---> 获取字符串的长度
String substring(int start,int end):在Stringbuilder中比较特殊,返回的是String类型。
例如 StringBuilder bul = new StringBuilder("adflkwefnkl");
bul.charAt(1);//结果为:"d"
bul.indexOf("a");//结果为:0
bul.lastIndexOf("n");//结果为:8
bul.length();//结果为:10
bul.substring(1,3)//结果为:"df"3.4 修改:
StringBuilder replace(start,end,string) ---> 将start到end(不包含end)位置上的字符串更改为指定字符串string
void setCharAt(int index,char ch) ---> 替换指定位置上的字符为指定字符
例如 StringBuilder bul = new StringBuilder("adflkwefnkl");
bul.replace(1,3,"JAVA");//结果为:"aJAVAlkwefnkl"
bul.replace(2,'M');//结果为:"adMlkwefnkl"
3.5 反转
S天ringBuilder setreverse() ---> 替换指定位置上的字符为指定字符
例如 StringBuilder bul = new StringBuilder("ABCD");
bul.reverse();//结果为:"DCBA"
引用数据类型
1、有时候,需要将int这样的基本类型转换为对象,以便可以使用一些方法。所有的基本类型都有一个相对应的类。这些类就称之为包装类。
2、基本数据类型对应的包装类:
基本数据类型 引用数据类型(包装类)
byte Byte
short Short
int Integeter
long Long
float Float
double Double
boolean Boolean
char Character
二、常见操作:
用于基本数据类型和字符串类型间的转换
1、转换:
1)基本数据类型转换为字符串
基本数据类型 + "" ---> 直接转换成字符串
基本数据类型.toString(基本数据类型值) ---> 如:Integer.toString(34);//将整数34变为"34"
2)字符串转换为基本数据类型:
基本数据类型名 变量名 = 包装类名.pase包装类名(String)
如:int a = Integer.paseInt("123");//结果为123
2、转二进制:
Integer.toBinaryString(int a);
十进制 -----> 其他进制
1)转为二进制:toBinaryString();
2)转为八进制:toOctalString();
3)转为十六进制:toHexString();
其他进制 -----> 十进制
parseInt(String,radix);