Java的string类
1.1声明字符串(在JAVA语言中必须包含一对双引号(“”)之内: “23,23”,“ABCD”,“你好”
String str=[null];
String :指定该变量为字符串类型;
str:任意有效的标识符;
null:如果省略null,表示str变量是未初始化状态,否则表示声明的字符串的值等于null。(声明字符串变量必须经过初始化才可以使用,否则编译器会报出“变量未初始化错误”)。
1.2创建字符串
String(char a[]):用一个字符数组a创建String对象。
char a[]={'h','e','l','l','o'};
String s=new String(a); 等价于===》String a=new String("hello");
String(char a[],int offset,int length):提取字符数组a的一部分创建一个字符串对象。参数offset为开始截取字符串的开始位置,length为截取字符串的长度。
char a={'h'.'e','l','l','o'};
String a=new String(a,2,3); 等价于===》String a=new String("llo");
String(char[] value):该构造方法可分配一个新的String对象,使其表示字符数组参数的所有元素连接的结果。
char a[]={'s','t','u','d','e','n','t'};
String a=new String(a); 等价于====》String a=new String("student");
2 连接字符串
2.1连接多个字符串:使用“+”可实现连接多个字符串的功能,“+”运算符可以连接多个运算符并产生一个String对象。
eg:
public class Join{
public static void main(String[]args){
String s1=new String("hello");
String s2=new String("world");
String s=s1+" "+s2;
System.out.println(s);
}
}
输出结果:hello world
2.2连接其他数据类型
eg:
public class Link{
public static void main(String[]args){
int booktime=2;
float pratice=2.5f;
System.out.println("我每天花费"+booktime+"小时来看书!"+pratice+"小时来上机练习");
}
} 输出结果:我每天花费2小时来看书!2.5小时来上机练习
2.3 获取字符串信息
2.3.1获取字符串长度: str.length();
eg: String s="we are student";
int size=s.length();===>size=15,备注:空格也代表字符串的长度
2.3.2字符串查找
a: str.indexOf(substr) str:任意字符串对象 substr:要搜索的字符串
String str="we are student";
int size=str.indexOf("a"); ====>size=3 从0开始计算
b: str.lastIndexOf(substr) 返回指定字符串最后一次出现的索引位置。
eg:
public class Text{
public static void main(String[]args){
String str="we are student";
int size=str.length();
int size1=str.indexOf("a");
int size2=str.lastIndexOf("t");
System.out.println("字符串str的长度"+size);
System.out.println("字符串str中a的位置:"+size1);
System.out.println("字符串str中t最后一次出现的位置:"+size2);
}
} 运行结果:size=15,size=3 ,size=13
3.3指定获取索引位置的字符
charAt()可将指定索引处的字符返回
charAt(int index): index:整型值,用于指定要返回的字符的下标。
eg:
public class Rel{
public static void main(String[]args){
String str="hello world";
char mychar=str.charAt(5);
System.out.println("字符串str中索引位置为5的字符为:"+mychar);
}
} mychar="w";
4:字符串操作
4.1获取子字符串:通过string类中的substring()方法可对字符串进行截取,字符串的下标是从0开始的。
a: substring(int beginIndex)
String str="Hello world";
String s=str.substring(2); 等价于====》String s=new String("llo world"); 在字符串中空格占用一个位置
b: substring(int beginIndex,int endIndex)
deginIndex:开始截取字符串的索引位置;
endIndex:结束位置
eg:
public class Subs{
piblic static void main(String[]args){
String str="hello world";
String s1=str.substring(3);
String s2=str.substring(2,5);
System.out.println(s1);
System.out.println(s2);
}
} 等价于=====》s1="lo world"; s2="llo ";
4.2去除空格
trim()方法返回字符串的副本,忽略前导空格和尾部空格
str.trim();
eg:
public class Blak{
public static void main(String[]args){
String str=" java class ";
String s=str.trim();
System.out.println("字符串的长度:"+str.length());
System.out.println("去掉空格的字符串长度:"+s.length());
}
} str.length()=12 s.length()=10;
4.3字符串的替换 replace()
str.replace(char oldchar,char newchar);
eg:
public class NewStr{
public static void main(String[]args){
String str="address";
String s=str.replace("a","A");
System.out.println(s);
}
}
输出结果:Address
如果要替换的字符oldchar在字符串中出现多次,replace()方法会将所有的oldchar全部替换成newchar。
4.4判断字符串的开始和结尾
startsWith()和endsWith()方法用于判断字符串是否以指定的内容开始或者结尾,这两个方法返回的都是boolean值。
str.startsWith(String s1); str.endsWith(String s2);
eg:
public class StartOrEnd{
public static void main(String[]args){
String s1="2200012";
String s2="21000078";
boolean b,b1,b2,b3;
b=s1.starstWith("22");
b1=s1.endsWith("78");
b2=s2.startsWith("22");
b3=s2.endsWith("78");
System.out.println(b);
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
}
}
运行结果: true,false,false,true
判断字符串是否相等
对字符串对象进行比较不能简单地使用“==”,因为比较运算符比较的是两个字符字典的地址是否相同。即使两个字符串的内容相同,两个对象的内存地址也是不同的。
equals()方法 str.equals(String str1) 其中str和str1是参加比较的两个字符串对象。equals()是区分大小写的;
equalsIgnoreCase() 方法 str.equalsIgnoreCase(String str1) ............... equalsIgnoreCase()是不区分大小写的;
eg:
public class Opinion{
public static void main(String[]args){
String s1=new String("abc");
String s2=new String("ABC");
boolean b=s1.equals(s2);
boolean b1=s1.equalsIgnoreCase(s2);
System.out.println(s1+"equals"+s2:"+b);
System.out.println(s1+"equals"+s2:"+b1);
}
}
false,ture
4.6按字典顺序进行比较
compareTo()方法为按字典顺序比较两个字符串,该比较基于字符串各个字符的Unicode值,按字典顺序将此string对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果此string对象位于参数字符串之前,则比较结果为一个负整数;如果按字典顺序此string对象位于参数字符串之后,则比较结果为一个正整数。r如果相等时,则返回0.
str.compareTo(String other)
eg:
public class Wordbook{
public static void main(String[]args){
String str=new String("b");
String str1=new String("a");
String str2=new String("c");
System.out.println(str+"compareTo"+str1:"+str.compareTo(str1));
System.out.println(str1+"compareTo"+str2:"+str1.compareTo(str2));
}
}
1,-1
4.7字母的大小转换
toLowerCase():将大写字母转换成小写字母;
toUpperCase();将小写字母转换成大写字母;
备注:在转换时数字或非字母的字符不受影响。
eg:
public class UpAndLower{
public static void main(String[]args){
String str=new String("abc DEF");
String newStr=str.toLowerCase();
String newStr1=str.toUpperCase();
System.out.println(newStr);
System.out.println(newStr1);
}
}
adc def;ABC DEF
4.7字符串分割:
split()方法可以使字符串按指定的分隔字符或字符串对其内容进行分割,并将分割后的结果存放在字符串数组中。split()方法提供了以下两种重载形式:
split(String sign) 该方法可根据给定的分隔符对字符串进行拆分。语法:str.split( String sign).
split(String sign,int limit) 该方法可根据给定的分割符对字符串进行拆分,并限定拆分的次数。语法:str.split(String sign,int limit)
eg:
public class Division{
public static void main(String[]args){
String str=new String("abc,def,ghi,jkl");
String[]newstr=str.split(",");
for(int i=0;i<newstr.length();i++){
System.out.println(newstr[i]);
}
String[] newstr2=str.split(",",2);
for(int i=0;i<newstr2.length();i++){
System.out.println(newstr[i]);
}
}
}
(abc def ghi jkl abc)第一次拆分结果 (def,ghi,gkl)第二次拆分结果
4.8格式化字符串
string类的静态format()的方法用于创建格式化的字符串。format()方法有两种重载形式:
a: format(String format,Object....args)
format:格式化字符串 args:格式字符串中由格式说明符引用的参数。
b:format(Local l,String format,Object...args)
l: 格式化过程中要应用的语言环境。如果l为null,则不进行本地化
4.8.1日期和时间字符串格式化
1日期格式化
Date date=new Date();
String s=new String.fromat("%te",date)
常用的日期格式化转换符
转换符 | 说明 | 示例 |
%te | 一个月中的某一天(1-31) | 2 |
%tb | 指定语言环境的月份简称 | Feb(二月)、二月(中文) |
%tB | 指定语言环境的月份全称 | February(二月)、二月(中文) |
%tA | 指定语言环境的星期几全称 | Monday(英语)、星期一(中文) |
%ta | 指定语言环境的星期几简称 | Mon(英语)、星期一(中文) |
%tc | 包括全部日期和时间信息 | 星期二 三月 25 13:37:22 GST 2008 |
%tY | 4位年份 | 2008 |
%tj | 一年中的第几天(001-366) | 085 |
%tm | 月份 | 03 |
%td | 一个月中的第几天(01-31) | 02 |
%ty | 2位年份 | 08 |
eg:
import java.Util.Date;
public class Eval{
public static void main(String[]args){
Date date=new Date();
String year=String.format("%tY",date);
String month=String.format("%tB",date);
String day=String.format("%td",date);
.......}
}
year=2017,month=八月;day=10
[^456]:代表4、5、6之外的任何字符
[a-r]:代表a-r中的任何一个字符
[a-e[g-z]]:代表a-e或g-z中任何一个字符(并运算)
[a-o&&[def]]:代表d,e,f字符(交运算)
[a-d&&[^bc]]:代表a,d(差运算)
限定修饰符 | 意义 | 示例 |
? | 0次或1次 | A? |
* | 0次或多次 | A* |
+ | 一次或多次 | A+ |
{n} | 正好出现n次 | A{2} |
{n,} | 至少出现n次 | A{2,} |
{n,m} | 出现n-m次 | A{2,4} |
eg:
public class Judge{
public static void main(String[]args){
String regex="\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";
String str1="aaa@";
String str2="aaaa";
String str3="1111@11ffyu.dfg.com";
if(str1.matches(regex)){
System.out.println(str1+"是一个合法的邮箱地址");
}
if(str2.matches(regex)){
System.out.println(str2+"是一个合法的邮箱地址");
}
if(str3.matches(regex)){
System.out.println(str3+"是一个合法的邮箱地址");
}
}
}
str3是一个合法的邮箱地址
4.9字符串生成器 StringBuilder()
eg:
public class Jerque{
public static void main(String[]args){
String str=""; //定义一个空的字符串
Long startTime=System.currentTimeMillis(); //定义对字符串执行操作的起始时间
for(int i=0;i<10000;i++){
str+=i;
}
Long endTime=System.currentMillis(); //定义字符串操作后的时间
Long Time=endTime-startTime;
System.out.println("String消耗的时间:"+Time);
StringBuilder builder=new StringBuilder(""); //创建字符串生成器
startTime=System.currenTimetMillis(); //定义操作执行前的时间
for(int j=0;j<10000;j++){
builder.append(j);
}
endTime=System.currentTimeMillis(); //定义操作后的时间
time=endTime-starTime;
System.out.println("StringBuilder消耗时间:"+time);
}
}
String消耗时间:668
StringBuilder消耗时间:2
通过这一实例可以看出,两种操作执行的时间差距很大。如果程序中频繁的附加字符串,建议使用StringBuilder。若要使用StringBuilder最后输入的字符串结果,可使用toString()方法。
(1)append()方法 该方法用于向字符串追加内容,通过该方法的多个重载形式,可实现接受任何类型的数据,如int、boolean、char等
append(content)
(2) insert(int offset,arg)方法 该方法用于向指定字符串生成器的指定位置插入数据内容。
offfset:字符串生成器的位置。该参数必须大于0,小于等于此序列的长度。
arg:将插入至字符串生成器的位置。该参数可以使任何数据类型或其他对象。
StringBuilder bf=new String("hello");
bf.insert(5,"world");
System.out.println(bf.toString());=========>显示helloworld
(3)delete(int start,int end) 移除此序列的子字符串中的字符。该子字符串从指定的位置start开始,一直所引到end-1处的字符,如果不存在这种字符,则一直到序列尾部,如果start等于end,则不会发生任何更改。
StringBuilder bf=new StringBuilder("StringBuilder");
bf.delete(5,10);
System.out.println(bf.toString());=====>Strinder