字符串
1.日期和时间字符串格式化
格式化字符串的语法:String.format(String format,Object...args),其中format是格式化的公式,表示按照什么公式来格式化,Object...args是一个不定长的参数,这个参数就是被格式化的值。例如:
Date date=new Date(); String string=String.format("%tF", date); System.out.println(date);//Tue Mar 16 21:16:08 CST 2021 System.out.println(string);//2021-03-16 String yearString=String.format("%tY", date); String month=String.format("%tB", date); String day1String=String.format("%td", date); System.out.println("今年是:"+yearString+"年");//今年是:2021年 System.out.println("现在是:"+month);//现在是:三月 System.out.println("今天是:"+day1String+"日");//今天是:16日 String hourString=String.format("%tH", date); String minuteString=String.format("%tm", date); String secondString=String.format("%tS", date); System.out.println("现在是:"+hourString+"时"+minuteString+"分"+secondString+"秒");//现在是:21时03分58秒 String string1String=String.format("%tF", date); System.out.println("tF格式:"+string1String);//tF格式:2021-03-16 String string2String=String.format("%tD", date); System.out.println("tD格式:"+string2String);//tD格式:03/16/21 String string3String=String.format("%tc", date); System.out.println("tc格式:"+string3String);//tc格式:周二 3月 16 21:49:58 CST 2021 String string4String=String.format("%tr", date); System.out.println("tr格式:"+string4String);//tr格式:09:49:58 下午
2.常规类型格式化
String string=String.format("字母x大写:%C",'x'); System.out.println(string);//字母x大写:X System.out.println(String.format("字母x大写:%C",'x'));//字母x大写:X System.out.println(String.format("1234+5678=%d", 1234+5678));//1234+5678=6912 System.out.println(String.format("PI取两位小数:%.2f", Math.PI));//PI取两位小数:3.14 System.out.println(String.format("2<3的结果:%b", 2<3));//2<3的结果:true System.out.println(String.format("1900000.4用科学计数法表示:%e", 1900000.4));//1900000.4用科学计数法表示:1.900000e+06 System.out.println(String.format("天才是由%d%%的灵感和%d%%的汗水", 1,99));//天才是由1%的灵感和99%的汗水
3.正则表达式
正则表达式是一组公式,描述了一种字符串匹配的格式。正则表达式通常被用于判断语句中,用来判断某一字符串是否满足某一格式,可以调用String中的matches(STring reges)方法判断字符串是否匹配给定的正则表达式,返回布尔类型的值。在正则表达式中可以用方括号括起来若干个字符表示一个元字符,该元字符可以代表方括号中的任意一个字符。在正则表达式中允许使用限定修饰符来限定元字符出现的次数,例如“A*”代表A可以在字符串中出现0次或多次,“A?”代表A可以在字符串中出现0次或1次,“A+”代表A可以在字符串中出现1次或多次,“A{n}”代表A可以在字符串中正好出现n次(n为具体数字),“A{n,}”代表A可以在字符串中至少出现n次,“A{n,m}”代表A可以在字符串中出现n次至m次
“.”表示任意一个字符
“\\d”表示0-9的任意一个数字
“\\D”表示表示任意一个非数字字符
“\\s”表示空白字符,例如'\t'、'\n'
“\\S”表示非空白字符
“\\w”代表可用作标识的字符,但不包括“$”
“\\W”代表不可用于标识的字符
“\\p{Lower}”代表小写字母a-z
“\\p{Upper}”代表大写字母A-Z
“\\p{ASCII}”代表ASCII字符
使用正则表达式可以用来判断指定的变量是否是合法的E-mail地址。E-mail的格式一般为[邮箱名]@[服务器名称].[中间名].[后缀],用正则表达式表述为:合法字符串@合法字符串.字符串(可无).字符串(最大三个字符);\\w+ @ \\w+ \\.* \\w{2,3} \\. \\w{2,3}。例如:
String regexString="\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}"; String a1String="11111"; String a2String="@163.com"; String a3String="rich@163.vip.com"; String a4String="136139613@qq.com"; String a5String="outman@163.com"; if(a1String.matches(regexString)) { System.out.println(a1String+"是合法的邮箱"); } if(a2String.matches(regexString)) { System.out.println(a2String+"是合法的邮箱"); } if(a3String.matches(regexString)) { System.out.println(a3String+"是合法的邮箱"); }//rich@163.vip.com是合法的邮箱 if(a4String.matches(regexString)) { System.out.println(a4String+"是合法的邮箱"); }//136139613@qq.com是合法的邮箱 if(a5String.matches(regexString)) { System.out.println(a5String+"是合法的邮箱"); }//outman@163.com是合法的邮箱
正则表达来判断一个电话号码是否属于大陆号码时,大陆号码的前三位有要求,第一位必须是“1”,第二位只能是“3”、“5”、“8”,当第二位是“3”时第三位可以是0-9中的所有数,当第二位是“5”时,第三位不能是“4”,当第二位是“8”时第三位只能是“0”、“5”、“6”、“7”、“8”、“9”。例如:
Scanner sc=new Scanner(System.in); String regex="(13[0-9]|15[0123456789]|18[056789])\\d{8}"; while (true) { String phone=sc.nextLine(); if(phone.matches(regex)) { System.out.println("您输入的是大陆内手机号"); }else { System.out.println("您输入的不是大陆内手机号"); } } /* 1 您输入的不是大陆内手机号 13187654321 您输入的是大陆内手机号 10087654321 您输入的不是大陆内手机号 */
4.字符串生成器
StringBuffer是线程安全的可变字符序列,一个类似String的字符串缓冲区,String创建的字符串对象是不可修改的,而StringBuffer类创建的是可修改的字符串序列,且实体容量会随着存在的字符串增加而增加。String类虽然提供了很多API方法,但始终是对字符串常量进行操作,不仅无法改变常量的值,还会占用大量的内存空间,StringBuffer类则是一个非常灵活的工具,节约内存空降的同时还保障了线程安全。
创建StringBuffer类:StringBuffer stb=new StringBuffer(),创建一个对象,无初始值;StringBuffer stb=new StringBuffer(“abc”),创建一个对象,初始值为“abc”;StringBuffer stb=new StringBuffer(32),创建一个对象初始容量为32个字符。
追加字符串序列:public StringBuffer append(Object obj),将参数转化成字符串,将所得字符串中的字符追加到序列中。修改指定索引处的字符:public void setCharAt(int index,char ch),将索引处的字符修改为ch。插入字符串:public StringBuffer insert(int offset,String str),将字符串str插入到offset位置。字符串反序:public StringBuffer reverse(),将字符串反序输出。删除子字符串:public StringBuffer delete(int start,int end),移除此序列子字符串中的字符,该子字符串是从指定的索引start开始,一直到索引end-1处,如果end-1超出最大索引范围,则一直到序列尾部,如果start等于end,那么不发生任何改变。
获取字符串序列的长度:int length=sbf.length();获取索引为n的字符:char chr=sbf.charAt(n);获取DEF字符串所在的索引位置:int index=sbf.indexOf("DEF");截取从索引n开始至索引m之间的字符串:String substr=sbf.substring(n,m);将从索引n开始至索引m之间的字符序列替换为“1234”:StringBuffer tmp=sbf.replace(n,m,"1234")。例如:
StringBuffer sbf1Buffer=new StringBuffer("春江潮水连海平,"); sbf1Buffer.append("海上明月共潮生。"); StringBuffer sbf2Buffer=new StringBuffer("滟滟随波千万里,何处春江无月明。"); sbf1Buffer.append(sbf2Buffer); System.out.println(sbf1Buffer);//春江潮水连海平,海上明月共潮生。滟滟随波千万里,何处春江无月明。 sbf1Buffer.setCharAt(7, '$'); sbf1Buffer.setCharAt(23, '$'); System.out.println(sbf1Buffer);//春江潮水连海平$海上明月共潮生。滟滟随波千万里$何处春江无月明。 sbf1Buffer.insert(7,","); sbf1Buffer.insert(24, ","); System.out.println(sbf1Buffer);//春江潮水连海平,$海上明月共潮生。滟滟随波千万里,$何处春江无月明。 sbf1Buffer=sbf1Buffer.reverse(); System.out.println(sbf1Buffer);//。明月无江春处何$,里万千波随滟滟。生潮共月明上海$,平海连水潮江春 sbf1Buffer=sbf1Buffer.reverse(); sbf1Buffer=sbf1Buffer.delete(8, 9); sbf1Buffer=sbf1Buffer.delete(16,100); System.out.println(sbf1Buffer);//春江潮水连海平,海上明月共潮生。 int length=sbf1Buffer.length(); System.out.println(length);//16 char chr=sbf1Buffer.charAt(3); System.out.println(chr);//水 int index=sbf1Buffer.indexOf("江"); System.out.println(index);//1 String subString=sbf1Buffer.substring(0,8); System.out.println(subString);//春江潮水连海平, StringBuffer tmpBuffer=sbf1Buffer.replace(0, 4, "chunjiangchaoshui"); System.out.println(tmpBuffer);//chunjiangchaoshui连海平,海上明月共潮生。
public void setCharAt(int index,char ch)

浙公网安备 33010602011771号