一,String类
单个字符可以用char类型保存,多个字符组成的文本就需要保存在String对象中String通常被称为字符串 ,一个String对象最多可以保存(2的32次方~1)个字节(4GB空间大小)的文件内容
1,声明字符串
字符串的使用必须在一对双引号之内,字符串常量可以是系统能够显示的任何文字
"helloword" "你好"
String str ;
String abc;
String hello;
2,创建字符串
将字符串作为对象来处理,因此可以想创建其他对象一样来创建字符串对象,创建对象要用到构造方法
String类的常用构造方法
(1)String(char a[])
使用一个字符数组a创建String对象有两种方法
char a[] ('g''o''o''d');定义一个一维数组
String s =new String(a);//创建对象
String s =new String("good");
(2)String(char a[],int offset ,int length)
这个方法是提取字符数组中a 的一本分创建一个字符串的对象 ,参数offset这个是这个选择从哪个字母开始截取 length表示截取的长度 主要代码如下所示
char[] ch2= {'a','b','c','d','e','f','g','h'};//定义一个一维数组
String e=new String(ch2,2,4);//创建对象 然后选择截取位置和长度
System.out.println(e);//依次输出
(3)String(char[]value)
该构造方法可分配一个新的String对象,使其表示字符数组参数中所有元素链接在的结果代码如下
char a[] ={'s','t','u','d','e','n','t'}
String s =new String(a,2,4);
等价于
String s =new String ("student");
除以上集中使用String类的构造方法来创建字符串变量外,还可以通过将字符串常量的引用用赋值给一个字符串变量来创建字符串
String str1,str2;
str1 ="你好";
str2 ="你好";
此时 str1 和str2引用的相同的字符串常量 因此具有相同的实体
二,连接字符串
对于已经声明的字符串,可以对其惊醒相应的操作,连接字符串就是字符串操作中比较简单的一种以对多个字符串进行连接,也可以字符串与其他数据类型进行连接
1,连接多个字符串
使用加号“+”运算符可以实现对多个字符串的连接,“+”运算符可以连接多个String对象并产生一个新的String对象 也不仅仅能字符串类型 使用也可以对其他的数据类型进行链接 以下两个例题例题讲述了连接多个字符串和连接其他类型数据的使用
(1)连接字符串
public class Join {//创建类
public static void main(String[] args) {//主方法
// TODO Auto-generated method stub
String s1=new String("春色绿千里");//声明String对象s1
String s2=new String("马蹄香万家");
String s= s1+"\n"+s2;//将对象s1/"\n"和对象s2连接并将结果赋值给s
System.out.println(s);//将s输出
}
}
(2)连接其他的数据类型
public class Link {//创建类
public static void main(String[] args) {//主方法
// TODO Auto-generated method stub
int booktime=4;//生命的int型的变量booktime
float practice =2.5f;//声明的float型变量practice
//将字符串与整型。浮点型变量相连并将结果输出
System.out.println("我每天花费"+booktime+"小时看书;"+practice+"小时上机练习");
System.out.println("我每天花费"+booktime+"小时看书;"+(practice+booktime)+"小时上机练习");
}
}
因为运算中是有优先级的 ,圆括号中的优先级最高 所以先被执行,然后再是将结果与字符串相连接
三,获取字符串信息
1,获取字符串长度
使用String类的length()方法可以获取生命的字符串对象的长度
str.length();
其中str 是你想获取的字符串对象的名字
String str ="We are students";
int size =str.length();
以上代码是将自负床str的长度赋值给int类型的变量size 此时变量size的值为15,这表示length()方法返回的字符串的长度 当然其中空格也算
2,字符串查找
字符串查找String类停工了两种查找字符串的方法,一个是indexOf()和lastIndexOf()方法。这两种方法都允许在字符串中搜索指定条件的字符或者字符串。indexOf()方法返回的是搜索的字符或者字符串首次出现的位置 lastIndexOf()方法的是搜索的字符或者字符串最后一次出现的位置。
如果后期代码中出现同样的字符或者字符串但只需要查找其中某个 如果想要首次出现的的话indexOf()方法 查找最后一个出现的位置就使用 lastIndexOf()
3,获取指定索引的字符使用
使用charAt()可以将指定索引处的字符返回
str.charAt(int index)
str是任意字符串
index:整型值,用于指定要返回字符的下标
public class Test2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//获取字符串信息
//获取字符串的长度
String str = "helloworld";//定义一个字符串类型的 STR并且赋值"nihao"
int length = str.length();//获取字符串长度
System.out.println(length);//并且输出length
//它会查找字符串第一次出现该元素的位置
int indexof =str.indexOf("l");//查找第一次出现的位置
System.out.println(indexof); //将其输出
//它会查找字符串最后一次出现该元素的位置
int lastindexof =str.lastIndexOf("l");//查找最后一次出现的位置
System.out.println(lastindexof);//将其输出
//获取指定索引号的字符
char charAt =str.charAt(6);
System.out.println(charAt);
//只返回一个字符就是用char类型
}
}
四,字符串的操作
String类中包含了很多方法,允许程序员对字符串进行操作来满足实际变成中的需要
1,获取子字符串
通过String类的substring()方法对字符进行截取。substring()方法被两种不同的重载形式来满足不同的需要,这形式的共同点就是利于字符串的下标进行截取,且应明确字符串的下标是重0开始的跟数组类似
( 1)substring(int beginlndex)
该方法返回的是从指定的索引位置开始截取知道字符串结尾的字串
str.substring(int beginlndex)
其中beginlndex指定从某一索引处开始截取字符串
String str ="Hello World";
String sybste =str.substring(3);
(2)substring(int beginIndex,int endIndex)
该方法返回的是从字符串某一索引位置开始截取至某一索引位置结束的字串
substring(int beginIndex,int endIndex)
beginIndex:开始截取子字符串的索引位置
endIndex:子字符串在整个字符串中的结束位置
public class Subs {
public static void main(String[] args) {//主方法
// TODO Auto-generated method stub
String str ="《将进酒》:李白 (唐)";//定义字符串
String substr =str.substring(6,8);//对字符串进行截取 使用前含后不含
System.out.println("《将进酒》的作者是"+substr);//输出截取后的字符串
}
}
2,去除空格:时使用trim()方法返回字符串的副本,忽略前导空格和尾部空格 字符串字母中间有空格的话就要使用到字符串的替换了
str.trim()
其中str为任何字符串的对象
3,字符串的替换:是使用replace()方法可实现将指定的字符或者字符串替换成新的字符或者字符串
str.replace(CharSequence target,CharSequence replacement)
targer:要替换的字符或者字符串
replacement:用于替换原来字符串的内容
4,判断字符串的开头与结尾
startsWith()方法与endsWith()方法分别是用来判断字符串是否只当的内容开始或者结束,这两个方法的返回值都是为布尔类型
startsWith()方法
判断该字符串的前缀是否为参数指定的字符串
str.startsWith(String prefix)
prefix是只作为前缀的字符串
endsWith()方法
判断该字符串的后最是否为参数指定的字符串
str.endsWith(String suffix)
public class Test3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//10.4字符串操作
String str = "helloworld";
//获取字串subString(括号内给了一个前索引号)
String substring1 =str.substring(3);
System.out.println(substring1);
//获取字串subString(前索引,后搜引号)前含后不含
String substring2 =str.substring(3,5);
System.out.println(substring2);
String st =" java class";
System.out.println(st +"长度"+ st.length());
String trim = st.trim();
System.out.println(trim+"的长度为"+trim.length());
//字符串的替换
String s ="address";
String replace =s.replace("a","A");
System.out.println(replace);
//判断字符串的开头
String num1 ="123456789";
boolean startswith =num1.startsWith("12");
System.out.println(startswith);
//判断字符串的结尾
String num2 = "12345678";
boolean endswith =num2.endsWith("89");
System.out.println(endswith);
}
}
5,判断字符串是否相等
对字符串对象进行比较不能简单的使用比较运算符“==”,因为比较运算符比较的是两个字符串的是否相同,即使两个字符串内容相同,两个对象的内存地址也是不同的,使用比较运算符任然会返回false
String a1 =newString("I am a student");
String c1 =new String ("I am a student");
boolean b (a1 ==c1);
先定义了两个字符串a1,c1 字符串内容相同 此时布尔类型的值为false 此时字符串b是对象 a1,c1是引用
因此就要使用到本小节的两个关键字 equals()方法和equalsIgnoreCase()方法
(1)equals()方法
如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较,是返回true ,否则返回false
str.equals(String otherstr)
str,otherstr是要比较的两个字符串对象
(2)equalsIgnoreCase()方法
是由多个equals()方法对字符串进行比较时区分大小写的,而equalsIgnoreCase()方法是在忽略大小所写的情况下比较两个字符串是否相等,返回结果认为boolean型,语法如下
str.equalsIgnoreCase(String otherstr)
跟上面的相同其中str,otherstr是要比较的两个字符串对象
这两种方法唯一不同的就是一个可以忽略大小写 一个不能忽略大小写
package 字符串;
public class Opinion {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1 ="abc";//创建一个字符串对象s1
String s2 ="ABC";//创建一个字符串对象s2
boolean b =s1.equals(s2);//使用equals()方法将两个字符串对象进行比较
boolean b1 =s1.equalsIgnoreCase(s2);//使用2.equalsIgnoreCase()方法将两个字符串进行比较其中可以忽略大小写
System.out.println(b);//将使用equals()方法方法的b进行输出
System.out.println(b1);//将使用equalsIgnoreCase()方法的b1进行输出
//使用这两种方法将会看到他们运行出来的不同结果,和这两种语句到底有什么意义
}
}
6,按字典顺序比较两个字符串
compareTo方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode的值,按字典顺序将String对象比较是字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此String对位于参数字符串之前则比较结果为一个负数;如果按字典顺序此String对象位于参数字符串之后,则比较结果为一个正整数;如果这两个字符串相等,则结果为0
str.compareTo(String otherstr)
str,otherstr是要比较的两个字符串对象
package 字符串;
public class Wordbook {//类名
public static void main(String[] args) {//主方法
// TODO Auto-generated method stub
String str1= "a";//定义字符串
String str2= "b";//定义字符串
String str3= "c";//定义字符串
System.out.println(str1.compareTo(str2));//判断先后顺序
System.out.println(str2.compareTo(str2));//判断先后顺序
System.out.println(str3.compareTo(str2));//判断先后顺序
}
}
先创建三个字符串对象然后依次赋值a,b,c 然后再使用compareTo方法将他们依次比较输出
7,字符大小写转换
String类的toLowerCase()方法可将字符串中的所有大写字母改写成小写字母,而另一种语句toUpperCase()可以将字符串中的所有小写字母改写成大写字母
(1)toLowerCase()方法
该方法将字符串中所有的大写字母转换成小写,如果自负床中没有应该被转换的字符,则将源字符串返回,否则将返回一个新的字符串,将原字符串中每一个小写字母都转换成大写,字符串长度不变
str.toLowerCase();
str是要进行转换的字符
(2)toUpperCase()该方法将字符串中所有小写的字符转换为大写,如果字符串中没有应该被转化的字符,则将原字符串返回;否则返回一个新字符串,将源字符串中每一个小写字母都转换为大写,字符串长度不变
str.toUpperCase();
str是要进行转换的字符
package 字符串;
public class UpAndLower {
public static void main(String[] args) {
// TODO Auto-generated method stub
String stri ="ho my god";//创建字符串对象stri
String lower =stri.toLowerCase();//使用stri.toLowerCase()方法将大写转换为小写
System.out.println(lower);//然后输出
String upper =stri.toUpperCase();//使用stri.toUpperCase()方法将小写转换为大写
System.out.println(upper);//然后输出
}
}
8,将字符串分割
使用split()方法可以使字符串按指定的分割字符或者字符串进行分割,并将分割后的结果存放在字符串数组中,split()方法提供了以下两种字符串分割形式、
(1)split(String sign)
该方法可以根据给定的分隔符来对字符串进行拆分
str.split(String sign);
sign为分割字符串的分隔符,也可以使用正则表达式
(2)split(String sign,int limit);
该方法可根据给定的分割符对字符串进行拆分,并且限制拆分的次数
str.split(String sign,int limit);
1.sign:分割字符串的分隔符,也可以使用正则表达式
2.limit:显示的分割次数
package 字符串;
public class Division {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str ="192.168.1.0";//创建一个字符串对象str
String[]firstArray=str.split("\\.");//将数组中使用\\.进行分割
String[]secondArray=str.split("\\.",2);//使用\\.分割两次
System.out.println("str的原值为:["+str+"]");//输出str的原值
System.out.println("全部分割的效果为:");//输出分割效果依次输出
for(String a :firstArray){//
System.out.println("["+a+"]");
}
System.out.println();//换行
System.out.println("分割两次的结果:");//输出分割两次的结果
for (String a:secondArray) {
System.out.println("["+a+"]");
}
System.out.println();
}
}
五,格式化字符串
String类的静态format()方法用于创建格式化的字符串。format()方法有两种方法
1,format(String format,Objet...args)
该方法使用指定的格式字符串和返回参数一个格式化字符串,格式化后的新字符串使用本地默认的语言环境
str.format(String format,Object...args)
format:格式化字符串
args:格式化字符串中由格式说明符引用参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可改变的,可以为0.
2,formal(Local |,String format ,Object...args)
该方法使用指定的语言环境。格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用其指定的语言环境
str.formal(Local |,String format ,Object...args)
格式化过程中要应用的语言环境。如果1为null,则不进行本地化
format:格式化字符串
args:格式化字符串中由格式说明符引用的参数。如果还有格式说明符外的参数,则忽略这些额外参数。此参数的数目是可变的 可以为0
1,日期和时间字符串格式化
在应用程序设计中,经常需要的显示日期和时间。如果想输出满意的日期和时间格式,一般需要编写大量代码,经过各种算法才能实现。format()方法 通过给定的特殊转换符作为参数来实现对日期和时间的格式化
1)日期格式化
Date date=new Date();//创建对象Date
String s =String.format("%te",date);//通过format()方法对date进行格式化
%te是转换符常用的日期格式化转换符
常用的日期格式化转换符
package 字符串;
import java.util.Date;
public class Eval {
public static void main(String[] args) {
// TODO Auto-generated method stub
Date date = new Date();//创建一个对象Date
String year =String.format("%tY",date);//格式化4位年份
String month =String.format("%tB",date);//格式化指定语言环境的月份全程
String day =String.format("%td",date);//格式化一个月中的第几天
System.out.println("今年是:"+year+"年");//将其输出
System.out.println("现在是:"+month);//将其输出
System.out.println("今天是:"+day+"号");//将其输出
}
}
时间格式化
使用format()方法不经可以完成日期的格式化们也可以实现时间的格式化。时间的格式化转换符
要比日期的格式化转化符更多,更精准,它可以将时间格式化为 时、分、秒、等等
时间格式化转换符
package 字符串;
import java.util.Date;
public class GetDate {
public static void main(String[] args) {
// TODO Auto-generated method stub
Date date = new Date();//创建一个对象Date
String hour =String.format("%tH",date);//将date格式化二十四时制的小时
String minute=String.format("%tM",date);//将date格式化两位数字的分钟数
String second =String.format("%tS",date);//将date格式化秒数
System.out.println("现在是:"+hour+"时"+minute+"分"+second+"秒");//将其输出
}
}
格式化常见的日期时间组合
格式化日期和时间组合的转换符定义了各种日期组合的格式,其中最常用的如表所示
常见的日期和时间组合格式
常规类型格式化
常规类型格式化可应用于任何参数类型,可通过下表常规标识符所示的转换符来实现
常规转换符
package 字符串;
public class General {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str =String.format("%d",400/2);//将结果以十进制格式显示
String str1 =String.format("%b",3>5);//将结果为boolean型显示
String str2 =String.format("%x",200);//将结果以十六进制格式显示
System.out.println("400的一半是:"+str);//输出格式化字符串
System.out.println("3>5正确吗:"+str1);//输出格式化字符串
System.out.println("200的十六进制数是:"+str2);//输出格式化字符串
}
}
六,使用正则表达式
正则表达式通常被用于判断语句,用来检查某一字段是否曼珠某一个是。正则表达式是含有一些具有特殊含义字符的字符串,这些特殊字符串为正则表达式的元字符 例如”\\d“表示数字0~9中任何一个”\\d“就是元素符
在正则表达式中,可以使用方括号阔起若干个字符来表示一个元字符,该院字符可表示方括号中的任何一个字符。例如reg="abc"4,这些字符串a4、b4、c4都是和正则表达式匹配的字符串
在正则表达式中允许使用限定修饰符来限定元字符出现的次数。例如,“A*”代表A可在字符串
中出现0次或多次
例题:
package 字符串;
public class Judge {//类名
public static void main(String[] args) {//主方法
// TODO Auto-generated method stub
String regex ="\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";//定义一个要匹配的E-mail地址的正则表达式
String str1 ="aaa@";//定义要进行验证的字符串
String str2 ="aaaa";//定义要进行验证的字符串
String str3 ="[email protected]";//定义要进行验证的字符串
String str4 ="[email protected]";//定义要进行验证的字符串
String str5 ="[email protected]";//定义要进行验证的字符串
String str6 ="[email protected]";//定义要进行验证的字符串
if(str1.matches(regex)) {//判断如果匹配成功的话将输出以下内容
System.out.println(str1+"是一个合法的E-mail的地址格式");
}else{//如果匹配不成功输出以下内容
System.out.println(666);//如果匹配不成功输出以下内容
}
if(str2.matches(regex)) {//判断如果匹配成功的话将输出以下内容
System.out.println(str2+"是一个合法的E-mail的地址格式");
}else{
System.out.println(666);//如果匹配不成功输出以下内容
}
if(str3.matches(regex)) {//判断如果匹配成功的话将输出以下内容
System.out.println(str3+"是一个合法的E-mail的地址格式");
}
if(str4.matches(regex)) {//判断如果匹配成功的话将输出以下内容
System.out.println(str4+"是一个合法的E-mail的地址格式");
}
if(str5.matches(regex)) {//判断如果匹配成功的话将输出以下内容
System.out.println(str5+"是一个合法的E-mail的地址格式");
}
if(str6.matches(regex)) {//判断如果匹配成功的话将输出以下内容
System.out.println(str6+"是一个合法的E-mail的地址格式");
}else{
System.out.println(666);//如果匹配不成功输出以下内容
}
}
}
七,字符串生成器
创建成功的字符串对象,其长度的固定的,内容不能够被改变和编译。虽然使用”+“可以达到附加新字符或者新字符串的目的,但”+“会场新一个新的String实例,会在内存中创建新的字符串对象,如果重复的对字符串进行修改,将极大的增加系统开销。 JDK新增了可变的字符序列StringBuilder类大大提高了平凡增加字符串的效率
package 字符串;
public class Jerque {//类名
public static void main(String[] args) {//主方法
// TODO Auto-generated method stub
String str ="";//创建空的字符串
long starTime =System.currentTimeMillis();//定义对字符串执行操作的起始时间
for(int i=0;i<1000;i++) {//利用for循环执行1000次操作
str =str+i;//循环追加字符串
}
long endTime =System.currentTimeMillis();//定义字符串操作后的时间
long time =endTime-starTime;//计算对字符串执行操作的时间
System.out.println("String消耗时间:"+time);//将执行的时间输出
StringBuilder builder =new StringBuilder("");//创建字符串生成器
starTime = System.currentTimeMillis();//更行操作执行前的时间
for(int j=0;j<1000;j++) {//利用for循环精心操作
builder.append(j);//循环追加字符
}
endTime =System.currentTimeMillis();//更新操作后的时间
time = endTime -starTime;//更新追加操作执行时间
System.out.println("StringBuilder消耗时间:"+time);//将操作时间输出
}
}
两种操作执行的时间差距很大,如果程序中频繁的附加字符串,建议使用StiringBuilder的类,新创建StiringBuilder对象初始容量是16个字符,可以自行制定厨师长度。如果将附加的字符草果可容纳的长度,则StiringBuilder对象子佛能够增加长度以容纳被附件的字符。若要使用StiringBuilder类最后输出字符串结果可使用toString()方法利用StiringBuilder类中的方法可动态的添加。删除和插入等字符串的编辑操作
(1)append()方法
该方法用于字符串生成其中追加内容。通过该方法的多个重载形式,可实现接受任何类型的数据,如int ,boolean,char, String,double 或者另一个字符串生成器等
append(content)
content表示要追加到字符串生成器中的内容,可以接受任何类型的数据或者其他对象
(2)insert(int offset,arg)方法
该方法用于向字符串生成器中的指定位置插入数据内容,通过该方法的不同重载形式,可实现想字符串生成器中插入 int,float,char,和boolean等基本数据类型的数据或其他对象 语法如下
insert(int offset arg)
offset:字符串生成器的位置。该参数必须大于等于0且小于等于此序列的长度
arg:将插入至字符生成器的位置。该参数可以是任何数据类型的数据或其他对象向字符生成器中指定的位置添加字符
StringBuilder bf =new StringBuilder("hello");//创建字符串生成器
bf.inset(5,"world");//添加至字符生成器的位置及内容
System.out.println(bf.toString());//将操作时间输出
(3)
delete(interestingstart,int end)方法
移除此序列的子字符串中的字符,该子字符串从指定的start处开始,一直到索引end-1出的字符如果不存在这种字符,则一直到序列尾部,如果start等于end则不发生任何更改语法如下
delete(interestingstart,int end)
start:将要删除的字符串的起点位置
end:将要删除的字符串的终点位置
删除指定位置的子字符串
StringBuiilder bf=new StringBuiilder("StringBuiilder");创建字符串生成器
bf.delete(5,10);//删除的子字符串
System.out.println(by.toString());//此时输出的信息为Strinder