10.1:String类
10.1.1:声明字符串:包含在双引号之内
10.1.2:字符串和字符类型的数组有相似之处
char [] ch = {'g','o','o','d'};
str=new String(ch);
等同于
String s =new String("good"); //底层实现方法
public class Test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//10.1 String 类
//字符串变量的声明
String str;
// System.out.println(str);
//字符串变量的初始化
str="你好";
str=new String("你好");//调用String的构造方法,实现逻辑,底层实现
System.out.println(str);
//字符串变量的初始化,传入字符类形的数组,数组里有好多字符,字符串和他相似;
//定义一个字符类型数组
char [] ch = {'g','o','o','d'};
str=new String(ch);//直接传入字符类型的数组
System.out.println(str);
//字符串变量的初始化,传入字符类形的数组,两个数字
char [] c = {'s','t','u','d','e','n','t'};
str=new String(c,1,3);//数字是前索引和个数
System.out.println(str);
}
}
10.2:连接字符串
10.2.1 使用+连接运算符可实现连接多个字符串的功能
10.2.2 连接其他数据类型
public class Join { //创建类
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1 = new String("春色绿千里");//声明对象
String s2 = new String("马蹄香万家");
String s=s1+"\n"+s2;//连接
System.out.println(s);//输出
}
}
//例题10.1
public class Link {
public static void main(String[] args) {
// TODO Auto-generated method stub
int booktime=4;
float practice=2.5f;//
System.out.println("我每天花费"+booktime+"小时看书;"+practice+"小时上机练习");
}
}
//例题10.2
10.1和10.2结合代码
public class Test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//10.1 String 类
//字符串变量的声明
String str;
// System.out.println(str);
//字符串变量的初始化
str="你好";
str=new String("你好");//调用String的构造方法,实现逻辑,底层实现
System.out.println(str);
//字符串变量的初始化,传入字符类形的数组,数组里有好多字符,字符串和他相似;
//定义一个字符类型数组
char [] ch = {'g','o','o','d'};
str=new String(ch);//直接传入字符类型的数组
System.out.println(str);
//字符串变量的初始化,传入字符类形的数组,两个数字
char [] c = {'s','t','u','d','e','n','t'};
str=new String(c,1,3);//数字是前索引和个数
System.out.println(str);
//10.2 连接字符串
//字符串相连接
System.out.println(str + ch);
//字符串与其他类型相连接
float f=11.25F;
int z=3;
System.out.println(f+str+z);
}
}
10.3:获取字符串信息
10.3.1 获取字符串长度
在数组中,用.length,获取长度
10.3.2 字符串查找
public class Text {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "We are students";
int size =str.lastIndexOf("");//将空字符串在str中的索引位置的值赋给size
System.out.println("空字符串在字符串str中的索引位置是:"+size);//将变量size输出
System.out.println("字符串str的长度是:"+str.length());//将字符串str的长度输出。
}
}
//例题10.3
第一次出现和最后一次出现的长度
indexOf和last indexOf
public class Test2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 10.3 获取字符串信息
String str ="hellowworld";
// 获取字符串长度
int length = str.length();
System.out.println(length);//获取长度
//查找字符串中出现该元素的位置。
//第一次出现的位置
int indexOf =str.indexOf("l");
System.out.println(indexOf);
//最后一次出现的位置
int lastindexOf =str.lastIndexOf("l");
System.out.println(lastindexOf);
//获取指定索引号的字符
char charat=str.charAt(3);
System.out.println(charat);
}
}
10.3.3 获取指定索引位置的字符
str.charAt
这表示在字符串的第三位的字符是什么。
public class Ref {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str ="hellowworld";//定义字符串为str
char mychar=str.charAt(6);//将字符串中索引位置为6的字符返回
System.out.println("字符串str中索引位置是6的字符为:"+mychar);//输出信息
}
}
//例题10.4
10.4:字符串操作
10.4.1 获取子字符串
str.substring(int beginindex)
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);//输出截取后的字符串
}}
//例题10.5
10.4.2 去除空格
str.trim():去除首尾空格
//去除首尾空格
String st = " Java Class ";
System.out.println(st+ "的长度为"+st.length());
String trim = str.trim();
System.out.println(trim+ "的长度为"+trim.length());
结合替换 去除
10.4.3 字符串替换
str.replace
//替换字符串
String s = "address";
String replace =s.replace("a","A");
System.out.println(replace);
public class Black {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = " Java Class ";
System.out.println("字符串原来的的长度为"+str.length());
String trim = str.trim();
System.out.println("去掉空格后的长度为"+str.trim().length());
}
}
//例题10.6
public class NewStr {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "address";
String newstr =str.replace("a","A");//把a替换
System.out.println(newstr);//输出
}
}
//例题10.7
10.4.4 判断字符串的开始与结尾
startsWith()和endWith()
//判断字符串的开始与结尾
String num1="22045612";
boolean startWith = num1.startsWith("22");
System.out.println(startWith);
//结尾
String num2="22045612";
boolean endsWith = num2.endsWith("12");
System.out.println(endsWith);
public class StartOrEnd {
public static void main(String[] args) {
// TODO Auto-generated method stub
String num1="22045612";
boolean b = num1.startsWith("22"); //判断真假
System.out.println("字符串num1是以22开始的吗?"+b);
String num2="21304578";
boolean b2 = num2.endsWith("78");
System.out.println("字符串num2是以78结尾的吗"+b2);
}
}
//例题10.8
10.4.5 判断字符串是否相等
equals:
equalsIgnoreCase :忽略大小写判断是否相同
public class Opinion {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1 =new String("abc");
String s2 =new String("ABC");
boolean b =s1.equals(s2);
boolean b2 =s1.equalsIgnoreCase(s2);
System.out.println(s1+"equals"+s2+":"+b);
System.out.println(s1+"equals"+s2+":"+b2);
}
}
//例题10.9
//判断字符串是否相等,开辟空间不同
String s1 =new String("abc");
String s2 =new String("abc");//没有new string的话指的是常用空间,指向静态
boolean b1=(s1==s2);//地址不同
System.out.println(b1);
boolean b2=s1.equals(s2);//判断内容是否相同
System.out.println(b2);
String s3 ="ABC";//忽略大小写所以为真
boolean b3=s1.equalsIgnoreCase(s2);
System.out.println(b3);
//12345678910123456X 忽略大小写判断
//12345678910123456x
10.4.6 按字典顺序比较两个字符串
str.compareTo
//10.4.6按照Unicode值比较字符串先后顺序
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));//后面和前面比
10.4.7 字母大小写转换
str.toLowerCase()
str.toUpperCase()
//10.4.7字母大小写转换
String stri ="MY LOVE";
String lower = stri.toLowerCase();//全部转换为小写,向下走
System.out.println(lower );
String upper = stri.toUpperCase();//全部转换为大写,向上走
System.out.println(upper);
10.4.8 字符串分割
split
//10.4.8字符串的分割
String strin="192.168.0.1";
String[] split =strin.split("\\.");//转义,分割为4个部分
for(String temp: split) {
System.out.println(temp);
}
String[] split2 =strin.split("\\.",2);//数字代表分为两部分,第一个点前面分为一部分
for(String temp: split2) {
System.out.println(temp);
10.5:格式化字符串
str.format(String):指定格式字符串
str.format(Local):指定语言环境
10.5.1 日期和时间字符串格式化
日期
转换符 | 说明 | 示例 |
%te | 一个月中的某一天 | 2 |
%tb | 指定语言环境的月份简称 | Feb(英文)、二月(中文) |
%tB | 指定语言环境的月份全称 | February(英文)、二月(中文) |
%tA | 指定语言环境的星期几全称 | Monday(英文)、星期一(中文) |
%ta | 指定语言环境的星期几简称 | Mon(英文)、星期一(中文) |
%tc | 包括全部日期和时间信息 | 星期二 三月 25 13:37:22CST 2008 |
%tY | 4位年份 | 2008 |
%tj | 一年中的第几天(001~366) | 085 |
%tm | 月份 | 03 |
%td | 一个月中的的第几天 | 02 |
%ty | 2位年份 | 08 |
时间
转换符 | 说明 | 示例 |
%tH | 2位数字的24时制的小时(00~24) | 14 |
%tI | 2位数字的12时制的小时(01~12) | 05 |
%tk | 2位数字的24时制的小时(00~23) | 5 |
%tl | 2位数字的12时制的小时(01~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 | 相对于GMTRFC82格式的数字时区偏移量 | +0800 |
% tZ | 时区缩写形式字符串 | CST |
%ts | 1970-001-01 00:00:00至现在经过的秒数 | 1206426646 |
%tQ | 1970-001-01 00:00:00至现在经过的毫秒数 | 106426737453 |
格式化常见的日期时间组合
转换符 | 说明 | 示例 |
%tF | “年—月—日”格式(4位年份) | 2003—11—25 |
%tD | “月/日/年”格式(2位年份) | 03/25/08 |
%tc | 全部日期和时间信息 | 星期五 五月 21 5:20 CST 2003 |
%tr | “时:分:秒 PM(AM)”格式(12小时制) | 03:22:06 下午 |
%tT | “时:分:秒”格式(24小时制) | 15:23:50 |
%tR | “时:分”格式(24小时) | 15:25 |
import java.util.Date;
public class Test4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//10.5 格式化字符串
//String 格式化后的字符串 = String.format(格式,字符串);
//日期和时间字符串的格式化
Date date = new Date(); //默认输出当前的时间
System.out.println(date);
//日期
String year = String.format("%ty",date);
String month = String.format("%tm",date);
String day = String.format("%td",date);
System.out.println(year + "年" + month + "月" + day + "日");
//时间
String hour = String.format("%tH",date);
String minute = String.format("%tM",date);
String second = String.format("%tS",date);
System.out.println(hour + "时" + minute + "分" + second + "秒");
//常用的日期时间格式化
String formatDate = String.format("%tF", date);
String formatTime = String.format("%tT", date);
System.out.println(formatDate + " " + formatTime);
}
}
10.5.2 常规类型格式化
转换符 | 说明 | 示例 |
%b、%B | 结果被格式化为布尔类型 | true |
%h、%H | 结果被格式化为散列码 | A05A5198 |
%s、%S | 结果被格式化为字符串类型 | "abcd" |
%c、%C | 结果被格式化为字符类型 | 'a' |
%d | 结果被格式化为十进制整数 | 40 |
%o | 结果被格式化为八进制整数 | 11 |
%x、%X | 结果被格式化为十六进制整数 | 4b1 |
%e | 结果被格式化为用计算机科学记数法表示的十进制数 | 1.700000e+01 |
%a | 结果被格式化为带有效位数和指数的十六进制浮点制 | 0X1.C00000000000001P4 |
%n | 结果为特定于平台的行分隔符 | |
%% | 结果为字面值“%' | % |
public class General {
public static void main(String[] args) {
// TODO Auto-generated method stub
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);//输出格式化字符串
}
}
//例题10.16
10.6:使用正则表达式
元字符 | 正则表达式中的写法 | 意义 |
. | . | 任意的一个字符 |
\d | \\d | 0~9的任何一个数字 |
\D | \\D | 任何一个非数字字符 |
\s | \\s | 空白字符,如'\t'、'\n'。 |
\S | \\S | 非空白字符 |
\w | \\w | 可用于标识符的字符,但不包括“S” |
\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(Print) | \\p(Print) | 可打印字符 |
\p(Blank) | \\p(Blank) | 空格或制表符 |
\p(Cntrl) | \\p(Cntrl) | 控制字符 |
限定修饰符 | 意义 | 示例 | 限定修饰符 | 意义 | 示例 |
? | 0次或1次 | A? | {n} | 正好出现n次 | A{2} |
* | 0次或多次 | A* | {n,} | 至少出现n次 | A{3,} |
+ | 一次或多次 | A+ | {n,m} | 出现n~m次 | A{2,6} |
matches:匹配
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 ="1111@111ffyu.dfg.com";
if(str1.matches(regex)) { //判断字符串变量
System.out.println(str1+"是一个合法的E-mail地址格式");
}
if(str2.matches(regex)) {
System.out.println(str2+"是一个合法的E-mail地址格式");
}
if(str3.matches(regex)) {
System.out.println(str3+"是一个合法的E-mail地址格式");
}
}
}
//例题10.17
10.7:字符串生成器
StringBuild类
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<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);
}
}
//例题10.18