1、String类
1.1 声明字符串
在java语言中字符串必须包含在一对双引号(“”)之内。字符串变量声明方法:
String str = "abcd";
- String:制定该变量为字符串类型;
- str:人以有效的标识符,表示字符串变量的名称;
1.2 创建字符串
在java语言中将字符串作为对象来管理,因此可以像创建其他类对象一样来创建字符串对象。创建对象要使用类的构造方法。String类的常用构造方法为:
- String(char a[]):用一个字符数组a创建String对象;
char a[] ={'g','o','o','d'};
String s = new String(a);
//等价于
String s = new String ("good"};
- String(char a[],int offset,int length):提取字符组a中的一部分创建一个字符串对象。参数offset表示开始截取字符串的位置,length表示截取字符串的长度。
char a[] ={'s','t','u','d','e','n','t'};
String s = new String(a,2,4);
//等价于
String s = new String ("uden"};
- 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 = "we are students";
str2 = "we are students";
//此时str1与str2引用相同的字符串常量,因此具有相同的实体。
2、连接字符串
对于已声明的字符串,可以对其进行相应的操作,连接字符串就是字符串操作中比较简单的一种。可以对多个字符串进行连接,也可以是字符串与其他数据类型进行连接。
2.1 连接多个字符串
使用“+”运算符可以实现连接多个字符串的功能。“+”运算符可以连接多个运算符并产生一个String对象。
public class ConnectToMultipleString {
/*
* 使用“+”连接多个字符串;
*/
public static void main(String[] args) {
String str1 = new String("hellow");
String str2 = new String("world");
String string = str1 + " " + str2;
System.out.println(string);
}
}
2.2 连接其他数据类型
字符串也可以同其他基本数据类型进行连接。如果将字符串同这些数据类型数据进行连接,会将这些数据直接转换成字符串。
public class ConnectOthersDataType {
/*
* 连接其他数据类型;
*/
public static void main(String[] args){
int booktime = 4;
float practice = 1.5f;
System.out.println("我每天花费"+booktime+"小时看书;"+practice+"小时练习;");
}
}
3、获取字符串信息
字符串作为对象,可通过对应方法获取字符串的有效信息,如获取字符串的长度,、某个索引位置的字符等。
3.1 获取字符串长度
使用String类的length()方法可获取声明字符串的长度。
public class LengthOfTheString {
/*
* 获取字符串长度;
*/
public static void mian(String[]args){
String i ="java";
int size = i.length();
}
}
3.2 字符串查找
String类提供了两种查找字符串的方法,即indexOf()方法与lastindexOf()方法。这两种方法都允许在字符串中搜索制定条件的字符或字符串。
- indexOf():返回的是搜索的字符或字符串首次出现的位置;
- lastindexOf():返回的是搜索的字符或字符串最后出现的位置;
public class SearchString {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* 查找字符串;
*/
String a = "we are strudents";
int b = a.indexOf("a");
int c = a.lastIndexOf("s");
System.out.println("a第一次出现的位置为:"+b);
System.out.println("s最后一次出现的位置为:"+c);
}
}
3.3 获取指定索引位置的字符
使用chatAT() 方法可以将制定索引处的字符返回。
public class SpecifyLocationCharactersReturn {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* 返回指定索引位置的字符;
*/
String i = "i'm a good student";
char Search = i.charAt(7);
System.out.println("字符串i中第三个字符为:"+Search);
}
}
3.4 字符串操作
String类中包含了很多方法,允许对字符串进行操作来满足实际编程中的需要。
3.4.1 获取子字符串
通过String类的substring()方法可对字符串进行截取。这些方法共同的特点就是都利用字符串的下标进行截取,且应明确字符串下标是从0开始的。
- substring(int beginIndex):该方法返回的是从指定的索引位置开始截取直到该字符串结尾的子串。
- substirng(int beninIndex,int endIndex):该方法返回的是从字符串某一索引位置开始截取至某一索引位置结束的子串。
public class ObtainSubstring {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* 获取自字符串;
*/
String a = "hellow word";
String b = a.substring(3);
String c = a.substring(3, 6);
System.out.println("字符串a从三位至结果子字符串:"+b);
System.out.println("字符串啊从三位至6为的子字符串"+c);
}
}
3.4.2 去除空格
trim()方法返回字符串的副本,忽略前导空格和尾部空格。
public class RemoveSpace {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* 取出字符串的前导空格和尾部空格;
*/
String i = " ja va ";
String j = i.trim();
System.out.println(j);
}
}
3.4.3 字符串替换
replace()方法可以实现将制定的字符或字符串替换成新的字符或字符串。
public class ReplaceString {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* 字符串替换;
*/
String i = "address";
String j = i.replace("a", "A");
System.out.println(j);
}
}
3.4.4判断字符串的开始与结尾
startsWith()方法与endsWith()方法分别用于判断字符串是否以制定内容开始或结束,这两个方法的返回值都为boolean类型。
- startsWith()方法:该方法用于判断当前字符串对象的前缀是否为参数制定的字符串。
str.startsWith(String prefix)
//prefix是指作为前缀的字符
- endsWith()方法:该方法适用于判断当前字符串是否以给定的子字符串结束。
str.endsWith(String suffix)
//suffix是指作为后缀的字符串
public class String_StartAndEnd {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* 判断字符串的开始与结尾;
*/
String num1 = "123456789";
String num2 = "987654321";
boolean N1 = num1.startsWith("12");
boolean N2 = num1.endsWith("00");
boolean N3 = num2.startsWith("00");
boolean N4 = num2.endsWith("21");
System.out.println("num1是以“12”开头的吗?"+N1);
System.out.println("num1是以“00”开头的吗?"+N2);
System.out.println("num2是以“00”开头的吗?"+N3);
System.out.println("num2是以“21”开头的吗?"+N4);
}
}
3.4.5 判断字符串是否相等
对字符串对象进行比较不能简单的使用比较运算符“==”,因为比较运算符比较的是两个字符串的地址是否相等。即使两个字符串的内容相同,两个对象的内存地址也是不同的,使用比较运算符任然会返回false。
- equals()方法:如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较。
str.equals(String otherstr)
- equalsIgnoreCase()方法:使用equals方法对字符串进行比较时是区分大小写的,而使用equalsIgnoreCase()方法是在忽略了大小写的情况下比较两个字符串是否相等,返回结果仍未boolean类型。
str.equalsIgnoreCase(String otherstr)
public class StringsAreEqual {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* 判断字符串是否相等
*/
String s1 = "abc";
String s2 = "ABC";
String s3 = "abc";
boolean b1 = s1.equals(s2);
boolean b2 = s1.equalsIgnoreCase(s2);
boolean b3 = s1.equals(s3);
System.out.println("s1=s2?"+b1);
System.out.println("s1=s2?"+b2);
System.out.println("s1=s3?"+b3);
}
}
3.4.6 按字典顺序比较两个字符串
compareTo()方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode值,按字典顺序将此String对象表示的字符序列与参与字符串所表示的字符序列进行比较。如果按字典顺序次String对象位于参数字符串之前,则比较结果为一个负整数;如果按字典顺序此String对象位于参数字符串之后,则比较结果是一个整数;若两个字符串相等,则结果为0.
str.compareTo(String otherstr)
public class StringComparisonDictionary {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* 按字典顺序比较两个字符串;
*/
String str = "a";
String str1 = "b";
String str2 = "a";
System.out.println(str+"compareTo"+str1+":"+str.compareTo(str1));
System.out.println(str+"compareTo"+str2+":"+str.compareTo(str2));
System.out.println(str1+"compareTo"+str+":"+str1.compareTo(str));
}
}
3.4.7 字母大小写转换
字符串的toLowerCase()方法可以将字符串中的所有字符从大写字母改为小写字母,而toUpperCase()方法可以将字符串中的小写字母改为大写字母。
- toLowerCase()
str.toLowerCase()
- toUpperCase()
str.toUpperCase()
public class StringCaseConversion {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* 字符串大小写转换;
*/
String str = "abc DEF";
String newstr1 = str.toLowerCase();
String newstr2 = str.toUpperCase();
System.out.println(newstr1);
System.out.println(newstr2);
}
}
3.4.8 字符串分割
使用split()方法可以使字符串按指定的分割字符或字符串对内容进行分割,并将分割后的结果存放在字符串数组中。
- split(String sign):该方法可以根据给定的分割符对字符串进行拆分,
str.spilt(String sign)
// sign为分割字符串的分割符,也可以使用正则表达式;
- split(String sign,int limit):该方法可以根据给定的分割符对字符串进行查分,并限定查分的次数。
str.split(String sign,int limit)
// sign:分割字符串的分割符,也可以使用正则表达式;
// limit:限制的分割次数;
3.5 格式化字符串
String类的静态format()方法用于创建格式化的字符串。
- format(String format,Object……args):该方法使用指定的格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用本地默认的语言环境。
str.format(String format,Object……args)
//format:格式字符串;
//args:格式字符串中由格式说明符引用的参数。如果还有格式说明符意外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0;
- fromat(Local 1,String format,Object……args):
1.格式化过程中要应用语言环境。如果1为null,则不进行本地化;
2.format:格式字符串;
3.args:格式字符串中由格式说明符引用的参数。如果还有格式说明符意外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0;
3.5.1 日期和时间字符串格式化
在应用程序设计中,经常需要显示时间和日期,如果想输出满意的日期和时间格式,一般需要写大量的代码经过各种算法才能实现。format()方法通过给定的特殊转换符作为参数来实现对日期和时间的格式化。
<1>日期格式化:
- %te:一个月中的某一天(1~31);
- %tb:指定语言环境的月份简称;
- %tB:指定语言环境的月份全称;
- %ta:指定语言环境的星期简称;
- %tA:指定语言环境的星期全称;
- %tc:包括全部日起和时间信息;
- %tY:4位年份;
- %ty:2位年份;
- %tj:一年中的第几天(1~365);
- %tm:月份;
- %td:一个月中的第几天(01~31);
<2>时间格式化:
- %tH:2位数字的24小时制的小时(00~23);
- %tk :2位数字的24小时制的小时(0~23);
- %tI :2位数字的12小时制的小时(0~12);
- %tl :2位数字的12小时制的小时(1~12);
- %tM:2位数字的分钟(00~59);
- %tS :2位数字的秒数(00~60);
- %tL :3位数字的毫秒数(000~999);
- %tN:9位数字的微秒数(000000000~999999999);
- %tp :指定语言环境下上午或下午标记;
- %tz :相对于GMT RFC 82 格式的数字时区偏移量;
- %tZ:时区缩写形式的字符串;
- %ts :1970-01-01 00:00:00至现在经过的秒数;
- %tQ:1970-01-01 00:00:00至现在经过的毫秒数;
<3>格式化常见的日期时间组合:
- %tF:“年(4位)-月-日”格式;
- %tD:“月/日/年(2位)”格式;
- %tc:全部日期和时间信息;
- %tr:“时:分:秒 PM(AM)”格式(12时制);
- %tT:“时:分:秒 PM(AM)”格式(24时制);
- %tR:“时:分”格式(24时制);
public class DateAndTimeFormatString {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* 日期和时间字符串格式化;
*/
Date date = new Date();
String year = String.format("%tY", date);
String month = String.format("%tm", date);
String day = String.format("%td", date);
String hour = String.format("%tk", date);
String minute = String.format("%tM", date);
String second = String.format("%tS", date);
System.out.println("今天是"+year+"年"+month+"月"+day+"日"+hour+"时"+minute+"分"+second+"秒");
}
}
3.5.2 常规类型格式化
常规类型格式化可应用于任何参数。
- %b,%B:结果被格式化为布尔类型(true);
- %h,%H:结果被格式化为散列码(A05A5198);
- %s,%S:结果被格式化为字符串类型(“abcd”);
- %c,%C:结果被格式化为字符类型(a);
- %d:结果被格式化为十进制整数(40);
- %o:结果被格式化为八进制整数(11);
- %x,%X:结果被格式化为十六进制整数(4b1);
- %e:结果被格式化为用计算机科学技术法表示的十进制数(1.7000000e+01);
- %a:结果被格式化为带有效位数和指数的十六进制浮点值(0X1.C000001P4);
- %n:结果为特定与平台的行分割符;
- %%:结果位字面值‘%(%)’
3.6 使用正则表达式
正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。
在正则表达式中可以使用方括号扩起若干个字符来表示一个元字符,该元字符可代表方括号中的任何一个字符。在正则表达式中允许使用限定修饰符来限定元字符出现的次数。
- ?:0次或1次;
- *:0次或多次;
- +:一次或多次;
- {n}:正好出现n次;
- {n,}:至少出现n次;
- {n,m}:出现n~m次;
3.7 字符串生成器
创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。随时用“+”可以达到附加新字符或字符串的目的,单“+”会产生一个新的String实例,会在内存中创建新的字符串对象。如果重复的对字符串进行修改,将极大的增加系统开销。
- append()方法:该方法用于想字符串生成器中追加内容。通过该方法的多个加载形式,可实现接受任何类型的数据。
append(content)
//content表示要追加到字符串生成器中的内容;
- insert(int offset, arg)方法:该方法用于向字符串生成器中的制定位置插入数据内容。通过该方法的不同加载形式,可实现向字符串生成器中插入基本数据类型或其他对象。
insert(int offset arg)
//offset:字符串生成器的位置,该参数必须大于0,且小于等于次序列的长度;
//arg:将插入字符串生成器的位置,该参数可以是任何的数据类型或其他对象;
- delete(int start, int end):移除次序列的子字符串中的字符。该子字符串从制定的start处开始,一直到索引end-1处的字符,如果不存在这种字符,则一直到序列尾部。如果start等于end,则不发生任何更改。
delete(int start, int end)
//start:将要删除的字符串的起点位置;
//end:将要删除的字符串的终点位置;