字符串

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)

posted @ 2021-03-16 23:39  zhang136139613  阅读(43)  评论(0)    收藏  举报