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);
char a[]={‘s’,‘t’,‘y’,‘d’,‘e’,‘n’,‘t’};
String s=new String(a,2,4);
等价于Sring s=new String(“uden”);
构造方法三:String(char[] value);
char a[]={‘s’,‘t’,‘y’,‘d’,‘e’,‘n’,‘t’};
String s=new String(a);
等价于String a=new String(“student”);
连接字符串
- 连接多个字符串:+
举例:
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 - 连接其他数据类型
举例:
public class Link {
public static void main(String[] args) {
int booktime=4;
float preactice=2.5f;
System.out.println(“我每天花费”+booktime+“小时看书,”+preactice+“小时上机练习”);
}
}
运行结果:我每天花费4小时看书,2.5小时上机练习
获取字符串信息
- 获取字符串长度:str.length();
- 字符串查找:indexOf()(返回搜索的字符或字符串首次出现的位置)、lastIndexOf()方法(返回搜索的字符或字符串最后一次出现的位置)
indexOf():没有检索到字符串,方法返回值-1;字符串下标是0~length()-1;
语法:str.indexOf(substr)
lastIndexOf()语法:str.lastIndexOf(substr);
举例:
package lesson5;
/**
- Created by admin on 2018/6/6.
*/
public class Text {
public static void main(String[] args) {
String str=" we are students “;
int size=str.lastIndexOf(”");
System.out.println(“空字符在字符串str中的索引位置是”+size);
System.out.println(“字符串str的长度是:”+str.length());
}
}
运行结果:
空字符在字符串str中的索引位置是17
字符串str的长度是:17 - 获取指定索引位置的字符:str.chaAt(index)
举例:
public class Text {
public static void main(String[] args) {
String str=" we are students ";
char mychar=str.charAt(6);
System.out.println(“字符串str中索引位置是6的字符是:”+mychar);
}
}
运行结果:
字符串str中索引位置是6的字符是:e
字符串操作
(1)获取子字符串:substring()
substring(int beginIndex):从指定的索引位置开始截取直到该字符串结尾的子串
语法:str.substring(int beginIndex)
举例:
public class Text {
public static void main(String[] args) {
String str=" we are students “;
String substr=str.substring(3);
System.out.println(substr);
}
}
运行结果: are students
substring(int beginIndex,int endIndex):从字符串某一索引位置开始截取至某一索引位子结束的子串
语法:substring(int beginIndex,int endIndex)
举例:
public class Text {
public static void main(String[] args) {
String str=” we are students “;
String substr=str.substring(0,3);
System.out.println(substr);
}
}
输出结果: we
(2)去除空格:trim()方法忽略前导空格和尾部空格;
语法:str.trim()
举例:
public class Text {
public static void main(String[] args) {
String str=” we are students “;
System.out.println(“字符串str的长度是:”+str.length());
System.out.println(“去掉空格后的长度”+str.trim().length());
}
}
运行结果:
字符串str的长度是:17
去掉空格后的长度15
(3)字符串替换:replace()方法
语法:str…replace(char oldChar,char newChar)
举例:
public class Text {
public static void main(String[] args) {
String str=” we are students “;
String newstr=str.replace(“w”,“W”);
System.out.println(newstr);
}
}
运行结果: We are students
(4)判断字符串的开始与结尾
startsWith()方法:用户判断当前字符串对象的前缀是否为参数指定的字符串;
语法:str.startsWith(String prefix)
endsWith()方法:判断当前字符串是否为以给定的子字符串结束;
语法:str.endsWith(string suffix)
举例:
public class StartOrEnd {
public static void main(String[] args) {
String num1=“22045612”;
String num2=“21304578”;
boolean b=num1.startsWith(“22”);
boolean b2=num1.endsWith(“78”);
boolean b3=num2.startsWith(“22”);
boolean b4=num2.endsWith(“78”);
System.out.println(“字符串num1是医22开始的吗?”+b);
System.out.println(“字符串num1是医78结束的吗?”+b2);
System.out.println(“字符串num2是医22开始的吗?”+b3);
System.out.println(“字符串num2是医78结束的吗?”+b4);
}
}
运行结果:
字符串num1是医22开始的吗?true
字符串num1是医78结束的吗?false
字符串num2是医22开始的吗?false
字符串num2是医78结束的吗?true
(5)判断字符串是否相等
equals()方法(区分大小写):str.equals(String otherstr)
equalsIgnoreCase()方法(不区分大小写):str.equalsIgnoreCase(String otherstr))
举例:
public class Opinion {
public static void main(String[] args) {
String s1=new String(“abc”);
String s2=new String(“ABC”);
boolean b1=s1.equals(s2);
boolean b2=s1.equalsIgnoreCase(s2);
System.out.println(s1+” equals “+s2+” “+b1);
System.out.println(s1+” equalsIgnoreCase “+” “+b2);
}
}
运行结果:
abc equals ABC false
abc equalsIgnoreCase true
(6)按字典顺序比较两个字符串:compareTo()方法
基于各个字符的Unicode值,String对象位于参数字符串之前,比较结果为负整数;String对象位于参数字符串之后,则比较结果为正整数;如果2个字符串相等,则结果为0;
语法:str.compareTo(String otherstr)
举例:
public class Wordbook {
public static void main(String[] args) {
String s1=new String(“b”);
String s2=new String(“a”);
String s3=new String(“c”);
String s4=new String(“b”);
System.out.println(s1+” compareto “+s2+”:"+s1.compareTo(s2));
System.out.println(s1+" compareto “+s3+”:"+s1.compareTo(s3));
System.out.println(s1+" compareto “+s4+”:"+s1.compareTo(s4));
}
}
运行结果:
b compareto a:1
b compareto c:-1
b compareto b:0
(7)字母大小写转换
toLowerCase()方法:转换为小写
语法:str.toLowerCase()
toUpperCase()方法:转换为大写
语法:str.toUpperCase()
举例:
public class UpAndLower {
public static void main(String[] args) {
String str=new String(“abc DEF”);
String newstr1=str.toLowerCase();
String newstr2=str.toUpperCase();
System.out.println(newstr1);
System.out.println(newstr2);
}
}
运行结果:
abc def
ABC DEF
(8)字符串分割:split()方法
split(String sign):sign为分割字符串的分割符,也可以使用正则表达式;如果想定义多个分割符,使用|符号
语法:str.split(String sign)
split(String sign,int limit):sign分割符、limit限制的分割次数;
语法:str.split(String sign,int limit)
举例:
public class Division {
public static void main(String[] args) {
String str=“192.168.0.1”;
//按照.进行分割,使用转义字符
String[] firstArray=str.split("\.");
//按照.进行二次分割,使用转义字符
String[] secondArray=str.split("\.",2);
String[] thirdArray=str.split("\.",3);
System.out.println(“str的原始值为:”+str);
System.out.print(“全部分割的结果:”);
for (String a:firstArray) {
System.out.print("["+a+"]");
}
System.out.println();
System.out.print(“分割两次的结果:”);
for (String a:secondArray) {
System.out.print("["+a+"]");
}
System.out.println();
System.out.print(“分割三次的结果:”);
for (String a:thirdArray){
System.out.print("["+a+"]");
}
}
}
运行结果:
str的原始值为:192.168.0.1
全部分割的结果:[192][168][0][1]
分割两次的结果:[192][168.0.1]
分割三次的结果:[192][168][0.1]
格式化字符串
- format(String format,Object…args)
语法:str.format(String format,Object…args)
format:格式字符串
args:格式字符串中由格式说明符引用的参数 - format(Local l,String format,Object…args)
l:格式化过程中要用到的语言环境,如果l为null,则不进行本地化;
(1)日期和时间字符串格式化 - 日期格式化,常用的日期格式化转换符:
转换符 说明 示例
%te 一个月中的某一天(1~31) 2
%tb 指定语言环境的月份简称 Feb(英文)、二月(中文)
%tB 指定语言环境的月份全称 February(英文)、二月(中文)
%tA 指定语言环境的星期几全称 Monday(英文)、星期一(中文)
%ta 指定语言环境的星期几简称 Mon(英文)、星期一(中文)
%tc 包括全部日期和时间信息 星期五 十一月 15 17:44:22 CST 2019
%tY 4位年份 2019
%tj 一年中的第几天(001~366) 085
%tm 月份 03
%td 一月中的第几天(01~31) 02
%ty 2位年份 08
举例:
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);
System.out.println(date);
System.out.println(“今年是:” + year + “年”);
System.out.println(“现在是:”+month);
System.out.println(“今天是:”+day+“号”);
}
}
运行结果:
Fri Nov 15 17:47:24 CST 2019
今年是:2019年
现在是:十一月
今天是:15号 - 时间格式化,时间格式化转换符:
转换符 说明 示例
%tH 2位数字的24时制的小时(00~23) 14
%tI 2位数字的12时制的小时(01~12) 05
%tk 2位数字的24时制的小时(0~23) 5
%tl 2位数字的12时制的小时(1~12) 10
%tM 2位数字的分钟(00~59) 05
%tS 2位数字的秒数(00~60) 12
%tL 3位数字的毫秒数(000~999) 920
%tN 9位数字的微秒数(000000000~999999999) 062000000
%tp 指定语言环境下上午或下午标记 下午(中文)、pm(英文)
%tz 相对于GMT RFC82格式的数字时区偏移量 +800
%tZ 时区缩写形式的字符串 CST
%ts 1970-01-01 00:00:00至现在经过的秒数 1206426646
%tQ 1970-01-01 00:00:00至现在经过的毫秒数 1206426737543
举例:
public class GetDate {
public static void main(String[] args) {
Date date=new Date();
String hour=String.format("%tH",date);
String minute=String .format("%tM",date);
String second=String.format("%tS",date);
System.out.println(“现在是:”+hour+“时”+minute+“分”+second+“秒”);
}
}
运行结果:
现在是:14时56分08秒 - 格式化常见的日期时间组合
转换符 说明 示例
%tF “年-月-日"格式(4位年份) 2019-11-18
%tD “月/日/年"格式(2位年份) 18/11/19
%tc 全部日期和时间信息 星期一 十一月 18 15:15:30 CST 2019
%tr “时:分:秒 PM(AM)“格式(12小时) 15:15:30 下午
%tT “时:分:秒 “格式(24小时) 15:15:30
%tR “时:分"格式(24小时) 15:15
举例:
public class GetDate {
public static void main(String[] args) {
Date date=new Date();
String time=String.format(”%tc”,date);
String form=String.format(”%tF”,date);
System.out.println(“全部的时间信息是:”+time);
System.out.println(“年-月-日格式:”+form);
}
}
运行结果:
全部的时间信息是:星期一 十一月 18 15:21:55 CST 2019
年-月-日格式:2019-11-18
(2)常规类型格式化
转换符 说明 示例
%b,%B 结果被格式化为布尔类型 true
%h,%H 格式化为散列码 A05A5198
%s,%S 结果被格式化为字符串类型 “adcd”
%c,%C 结果被格式化为字符类型 ‘a’
%d 结果被格式化为十进制整数 40
%o 结果被格式化为八进制整数 11
%x,%X 结果被格式化为十六进制正式 4b1
%e 结果被格式化为用计算机科学计数法表示的十进制数 1.70000e+01
%a 结果被格式化为带有效位数和指数的十六进制浮点值 0X1.C000000000001P4
%n 结果为特定于平台的行分隔符
%% 结果为字面值‘%’
举例:
public class General {
public static void main(String[] args) {
String str=String.format(”%d”,400/2);
String str2=String.format(”%b",3>5);
String str3=String.format("%x",200);
System.out.println(“400的一半是:”+str);
System.out.println(“3>5正确吗?”+str2);
System.out.println(“200的十六进制数是:”+str3);
}
}
运行结果:
400的一半是:200
3>5正确吗?false
200的十六进制数是:c8
使用正则表达式
元字符 正则表达式中的写法 意义
. . 代表任意一个字符
\d \d 代表0-9的任何一个数字
\D \D 代表任何一个非数字字符
\s \s 代表空白字符,如\t、\n
\S \S 代表非空白字符
\w \w 代表可用作标识符的字符,但不包括$
\W \W 代表不可用于标识符的字符
\p{Lower} \p{Lower} 代表小写字母a~z
\p{Upper} \p{Upper} 代表大写字母A-Z
\p{ASCII} \p{ASCII} ASCII字符
\p{Alpha} \p{Alpha} 字母字符
\p{Digit} \p{Digit} 十进制数字,即0-9
\p{Alnum} \p{Alnum} 数字或字母字符
\p{Punct} \p{Punct} 标点符号:!"#$%&’()*+,-./:;<=>?@[]^_{|}~
\p{Graph} \p{Graph} 可见字符:[\p{Alnum}\p{Punct}]
\p{Print} \p{Print} 可见字符:[\p{Graph}\x20]
\p{Blank} \p{Blank} 空格或制表符:\t
\p{Cntrl} \p{Cntrl} 控制字符:[\x00-\x1F\x7F]
举例:
[^456]:代表4、5、6之外的任何字符;
[a-r]:代表a-r中的任何一个字母;
[a-zA-Z]:可表示任意一个英文字母;
[a-e[g-z]]:代表ae,或者gz中的任何一个字母(并运算);
[a-o&&[def]]:代表字母d、e、f(交运算);
[a-d&&[^bc]]:代表字母a、d(差运算);
限定修饰符:
限定修饰符 意义 示例
? 0次或1次 A?
- 0次或多次 A*
- 一次或多次 A+
{n} 正好出现n次 A{2}
{n,} 至少出现n次 A{3,}
{n,m} 出现n~m次 A{2,6}
举例:邮箱校验String regex="\w+@\w+(\.\w{2,3})\.\w{2,3}"
public class Judge {
public static void main(String[] args) {
String regex="\w+@\w+(\.\w{2,3})\.\w{2,3}";
String str1=“aaa@”;
String str2=“aaaaa”;
String str3=“1111@111ffyu.dfg.com”;
if (str1.matches(regex)) {
System.out.println(str1+“是一个合法的email地址格式”);
}
if (str2.matches(regex)){
System.out.println(str2+“是一个合法的email地址格式”);
}
if (str3.matches(regex)){
System.out.println(str3+“是一个合法的email地址格式”);
}
}
}
运行结果:
1111@111ffyu.dfg.com是一个合法的email地址格式
字符串生成器
举例:
public class Jerque {
public static void main(String[] args) {
String str="";
long starTime=System.currentTimeMillis();
for (int i=0;i<10000;i++){
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<10000;j++){
builder.append(j);
}
endTime=System.currentTimeMillis();
time=endTime-starTime;
System.out.println(“stringbuilder消耗的时间:”+time);
}
}
运行结果:
string消耗时间:1073
stringbuilder消耗的时间:1
append()方法:该方法用户向字符串生成器中追加内容;
语法:append(content);
insert(int offset,arg)方法:用于向字符串生成器中的指定位置插入数据内容;
语法:insert(int offset,arg)
delete(int start,int end)方法:移除此序列的子字符串中的字符
语法:delete(int start,int end)