Java 基础学习——复习 第三天--字符串

5 字符串

5.1 String 类

(1)字符串的声明,双引号中的内容表示字符串;声明方法:String a; String a,b;分别声明一个和两个字符串变量

(2)创建字符串

        1.引用字符串常量--直接将字符串常量赋值给String类型变量——String a=“时间就是金钱,我的朋友”;

        2.利用构造方法示例化--使用new关键字创建String对象——String a=new String(“我爱刘敬”);

        3. 利用字符数组实例化--例 : char[ ] charArrays ={'t','i','m','e'}; String a=new String (charArrays);

        4.提取字符数组的一部分创建字符串对象--例 : char[ ]charArrays ={'t','i','m','e'}; String a=new String (charArrays,2,2);

方法实现:

public classCreateString{

        publicstatic void main(String[] args) {

                 //直接引用字符串常量

                 Stringa = "时间就是金钱,我的朋友。";

                 System.out.println("a= " + a);

                 //利用构造方法实例化

                 Stringb = new String("我爱清汤小肥羊");

                 //使用已有字符串变量实例化

                 Stringc = new String(b);

                 System.out.println("b= " + b);

                 System.out.println("c= " + c);

 

                 char[]charArray = { 't', 'i', 'm', 'e' };

                 //利用字符数组实例化

                 Stringd = new String(charArray);

                 System.out.println("d= " + d);

 

                 char[]charArray2 = { '时', '间', '就', '是', '金', '钱' };

                 //提取字符数组部分内容,从下标为4的元素开始,截取2个字符

                 Stringe = new String(charArray2, 4, 2);

                 System.out.println("e= " + e);

        }

}

结果:

5.2 连接字符串

(1)字符串连接 --使用‘+’‘+=’进行字符串之间的连接

(2)连接其他数据类型--会将其他数据转化成字符串

5.3 提取字符串信息

    (1)获取字符串长度--使用 length()方法获取字符串的长度 方法:str.length();

    (2)获取指定字符--使用charA(index)方法可将指定索引处的字符返回 方法str.charA(index); str=任意字符串,index:char值得索引

    (3)获取子字符串索引位置

            1.indexOf(String str)--该方法用于返回参数字符串在指定字符串str中首次出现的索引位置。如果没有检索到,该方法的返回值为-1;语法:a.indexOf(str); a:任意字符串对象; str:要搜索的字符串;

代码实现:

public class StringIndexOf {

        publicstatic void main(String[] args) {

                 //创建字符串对象

                 Stringstr = "12345abde";

                 //获取字符串str中"abc"首次出现的索引,赋值给charIndex

                 intcharIndex = str.indexOf("abc");

                 //判断:index的值不等于-1

                 if(charIndex != -1) {

                         //如果index不等于-1,则执行此行代码,说明str中存在“abc”字符串

                         System.out.println("str中存在abc字符串");

                 }else {

                         //如果index等于-1,则执行此行代码,说明str中没有“abc”字符串

                         System.out.println("str中没有abc字符串");

                 }

        }

}

结果:

            2.indexOf(String str,int fromIndex)--从指定索引fromIndex开始至字符串最后,返回指定子字符串在字符串中第一次出现处的索引。如果没有检索到,该方法的返回值为-1;语法:a.indexOf(str,fromIndex);a:任意字符串对象; str:要搜索的子字符串;fromIndex:开始搜索索引的索引位置

代码实现:

public class StringIndexOf2 {

        publicstatic void main(String[] args) {

                 //创建字符串

                 Stringstr = "We are the world";

                 //获取字符串中"r"第一次出现的索引位置

                 intfirstIndex = str.indexOf("r");

                 //获取字符串中"r"第二次出现的索引位置,从第一次出现的索引位置之后开始查找

                 intsecondIndex = str.indexOf("r", firstIndex + 1);

                 //获取字符串中"r"第三次出现的索引位置,从第二次出现的索引位置之后开始查找

                 intthirdIndex = str.indexOf("r", secondIndex + 1);

                 //输出三次获取的索引位置

                 System.out.println("e第一次出現的索引位置是:"+ firstIndex);

                 System.out.println("e第二次出現的索引位置是:"+ secondIndex);

                 System.out.println("e第三次出現的索引位置是:"+ thirdIndex);

        }

}

结果:

            3.lastIndexOf(Stringstr)--返回指定子字符串在此字符串最右边出现处的索引。--语法:a.lastIndexOf(str);a:任意字符串对象; str:要搜索的字符串;

代码实现:

public class StringLastIndexOf {

        publicstatic void main(String[] args) {

                 Stringstr = "Let it go!Let it go!"; //创建字符串对象

                 intgIndex = str.lastIndexOf("g");  // 返回”g“最后一次出现的位置

                 intgoIndex = str.lastIndexOf("go");      // 返回”go“最后一次出现的位置

                 intoIndex = str.lastIndexOf("o");  // 返回”o“最后一次出现的位置

                 System.out.println("字符串\"Letit go!Let it go\"中:\n");

                 System.out.println("\"g\"最后一次出现的位置是:"+ gIndex);

                 System.out.println("\"o\"最后一次出现的位置是:"+ oIndex);

                 System.out.println("\"go\"最后一次出现的位置是:"+ goIndex);

                 Stringstr1 = "人过大佛寺,寺佛大过人";

                 intgIndex1 = str1.lastIndexOf("人");

                 System.out.println("\"人\"最后一次出现的位置是:"+ gIndex1);

        }

}

结果

            4.lastIndexOf(String str,int fromIndex)--返回指定子字符串在此字符串中最后一次出现处的索引,从指定索引位置开始反向搜索。a.lastIndexOf(str,fromIndex);a:任意字符串对象; str:要搜索的子字符串;fromIndex:开始搜索索引的索引位置

代码实现:

public class StringLastIndexOf2 {

        publicstatic void main(String[] args) {

                 Stringstr = "01a3a56a89";

                 //返回字母"a"最后一次出现的索引位置

                 intlastIndex = str.lastIndexOf("a");

                 //返回字母"a"的索引位置otherIndex

                 //满足0<=fiveBeforeIndex<=5条件,在满足条件的结果集中,返回最大的数字

                 intfiveBeforeIndex = str.lastIndexOf("a", 5);

                 //返回字母"a"的索引位置otherIndex

                 //满足0<=threeBeforeIndex<=3条件,在满足条件的结果集中,返回最大的数字

                 intthreeBeforeIndex = str.lastIndexOf("a", 3);

                 System.out.println("字符串\"01a3a56a89\"中:\n");

                 System.out.println("字母\"a\"最后一次出现的位置是:"+ lastIndex);

                 System.out.println("从索引位置5开始往回搜索,字母\"a\"最后一次出现的位置:"+ fiveBeforeIndex);

                 System.out.println("从索引位置3开始往回搜索,字母\"a\"最后一次出现的位置:"+ threeBeforeIndex);

        }

}

 结果:

    (4)判定字符串首尾内容

            1.starsWith(String str)--用于判定字符串是否以指定的前缀开始。语法:a.starsWith(str);a:任意字符串; str:要作为前缀的字符串;

代码实现:

public classStringStartWith {

        publicstatic void main(String[] args) {

                 //前半句

                 StringmyDream1 = "我有一个梦想,幽谷上升,高山下降;";

                 //后半句

                 StringmyDream2 = "坎坷曲折之路成坦途,圣光披露,满照人间。";

                 //打印整句话

                 System.out.println(myDream1+ myDream2 + "\n\t\t————马丁•路德金《我有一个梦想》\n");

                 //判断前半句是否以"我有一个梦想"为前缀

                 booleanfirstBool = myDream1.startsWith("我有一个梦想");

                 //判断后半句是否以"我有一个梦想"为前缀

                 booleansecondBool = myDream2.startsWith("我有一个梦想");

                 //判断前半句的逻辑结果

                 if(firstBool) {

                         System.out.println("前半句是以\"我有一个梦想\"开始的。");

                         //判断后半句的逻辑结果

                 }else if (secondBool) {

                         System.out.println("后半句是以\"我有一个梦想\"开始的。");

                         //如果没有符合条件的字符串

                 }else {

                         System.out.println("没有以\"我有一个梦想\"开始的。");

                 }

        }

}

结果:

            2.starsWith(String str,int index)--用于判定从指定索引开始的子字符串是否以指定的前缀开始。语法:a.starsWith(str,index);a:任意字符串; str:要作为前缀的字符串;index:开始查找的位置。

代码实现:

public classStringStartWith2 {

        publicstatic void main(String[] args) {

                 //创建字符串对象

                 Stringstr = "床前明月光,疑是地上霜。\n举头望明月,低头思故乡。";

                 //打印古诗

                 System.out.println("  《静夜思》\n" + str +"\n");

                 //返回换行符所在的位置

                 intenterIndex = str.indexOf("\n");

                 //返回从换行符之后开始的子字符串前缀是否为”举“。

                 //换行符在字符串中只占一个字符,所以enterIndex + 1

                 booleanflag = str.startsWith("举", enterIndex + 1);

                 if(flag) {

                         //如果结果为真,则输出此句

                         System.out.println("第二行是以\"举\"开始的");

                 }else {

                         //如果结果为假,则输出第二行开头第一个字符

                         System.out.println("第二行是以\""+ str.charAt(enterIndex + 1) + "\"开始的");

                 }

        }

}

结果:

            3.endsWith(String str)--用于判断字符串是否以指定的后缀结束。语法:a.starsWith(str);a:任意字符串; str:指定的后缀字符串;

代码实现:

public classStringEndsWith {

        publicstatic void main(String[] args) {

                 Stringstr1 = "你说完了吗?";

                 Stringstr2 = "我说完了.java";

                 booleanflag1 = str1.endsWith("。");// 判断str1是否以"。"结尾

                 booleanflag2 = str2.endsWith(".java");// 判断str2是否以"。"结尾

                 System.out.println("字符串str1是以句号结尾的吗?"+ flag1);// 输出结果

                 System.out.println("字符串str2是以.java结尾的吗?" +flag2);

        }

}

结果:

    (5)获取字符数组

            1.toCharArray()方法可以将一个字符串转化为一个字符数组。语法str.toCharArray();str:任意字符串

代码实现

public classStringToArray {

        publicstatic void main(String[] args) {

                 Stringstr = "这是一个字符串";//创建一个字符串

                 char[]ch = str.toCharArray();//将字符串转换成字符数组

                 for(int i = 0; i < ch.length; i++) {//遍历字符数组

                         System.out.println("数组第" + i+ "个元素为:" + ch[i]);//输出数组的元素

                 }

        }

}

结果

    (6)判定子字符串是否存在

            1.contains()方法可以判断字符串中是否包含指定的内容。语法str.contains(string);str:任意字符串;string:查询的子字符串。

代码实现:

public classStringContains {

        publicstatic void main(String[] args) {

                 //创建字符串

                 Stringstr = "今天的菜单有:蒸羊羔,蒸熊掌,蒸鹿尾。烧花鸭,烧雏鸡,烧子鹅,卤煮咸鸭,酱鸡,腊肉,松花小肚。";

                 System.out.println(str);//输出字符串

                 booleanrequest1 = str.contains("腊肉");// 判断字符串中是否有“腊肉”的字样

                 System.out.println("今天有腊肉吗?"+ request1);

                 booleanrequest2 = str.contains("汉堡");// 判断字符串中是否有“汉堡”的字样

                 System.out.println("今天有汉堡吗?"+ request2);

        }

}

结果:

今天的菜单有:蒸羊羔,蒸熊掌,蒸鹿尾。烧花鸭,烧雏鸡,烧子鹅,卤煮咸鸭,酱鸡,腊肉,松花小肚。
今天有腊肉吗?true
今天有汉堡吗?false

5.4字符串操作

    (1)截取字符串

            1.substring(int beginIndex)--该方法返回一个新的字符串,它是此字符串的一个子字符串,该字符串从指定的索引处开始,直到此字符串的末尾。语法:str.substring( beginIndex);str:任意字符串。beginIndex:起始索引(包括)

代码实现:

public class StringSub {

        publicstatic void main(String[] args) {

                 Stringstr = "为革命保护视力,眼保健操开始!";

                 Stringsubstr = str.substring(8);              //从第8位开始截取字符串

                 System.out.println("字符串str的后半句是:"+ substr);

        }

}

结果:

字符串str的后半句是:眼保健操开始!

            2.substring(int beginIndex,int endindex)--该方法返回一个新的字符串,它是此字符串的一个子字符串,该字符串从指定的beginIndex处开始,直到索引endindex-1处的字符。语法:str.substring( beginIndex,endindex);str:任意字符串。beginIndex:起始索引(包括)。endindex:结束索引)(不包括)。

代码实现:

public classStringSub2 {

        publicstatic void main(String[] args) {

                 Stringstr = "闭门造车,出门合辙。";

                 //从0开始(即从头开始)截取至4-1索引位置的子字符串

                 Stringsubstr = str.substring(0, 4);

                 System.out.println("字符串str的前半句是:"+ substr);

        }

}

结果:

字符串str的前半句是:闭门造车

    (2)字符串替换

            1.replace(CharSequence target,CharSequence replacement)--该方法可以实现将指定的字符串序列替换成新的字符序列。语法:str.replace(oldstr,newstr)str:任意字符串,oldstr:要被替换的字符序列,newstr:替换后新的字符序列。

代码实现:

public class StringReplace {

        publicstatic void main(String[] args) {

                 Stringstr="明月几时有,把酒问青天";            

                 Stringrestr=str.replace("月", "日");     //将str中的”月“全部替换成”日“

                 System.out.println("字符串str替换之后的效果:"+restr);

        }

}

结果:

字符串str替换之后的效果:明日几时有,把酒问青天

        2.replaceAll(String oldstr,String newstr)--该方法可以实现将指定的字符串替换成新的字符串,支持正则表达式。语法:str.replaceAll(oldstr,newstr)str:任意字符串,oldstr:要被替换的字符串或正则表达式,newstr:替换后新的字符串。

代码实现:

public classStringReplaceAll {

        publicstatic void main(String[] args) {

                 //创建字符串,前十位是数字

                 Stringstr = "0123456789abc\\d";

                 //使用replace()将符合"\\d"表达式的字符串替换"?"

                 Stringrestr = str.replace("\\d", "?");

                 //使用replaceAll()将符合"\\d"表达式的字符串替换"?"

                 StringrestrAll = str.replaceAll("\\d", "?");

                 //输出结果

                 System.out.println("字符串str:" + str);

                 System.out.println("使用replace()替换的结果:"+ restr);

                 System.out.println("使用replaceAll()替换的结果:"+ restrAll);

        }

}

结果:

字符串str:0123456789abc\d
使用replace()替换的结果:0123456789abc?

使用replaceAll()替换的结果:??????????abc\d

            3.replaceFirst(String oldstr,String newstr)--该方法可以实现将第一个指定的字符串替换成新的字符串,支持正则表达式。语法:str.replaceFirst(oldstr,newstr)str:任意字符串,oldstr:第一个被替换的字符串或正则表达式,newstr:替换后新的字符串。

代码实现:

public classStringReplaceFirst {

        publicstatic void main(String[] args) {

                 //创建字符串

                 Stringstr = "8I want to marry you, so I need you!";

                 //将开头的数字去掉

                 StringnoNumber = str.replaceFirst("\\d", "");

                 //将第一次出现的"you"替换成"her"

                 StringyouToHer = noNumber.replaceFirst("you", "her");

                 //输出结果

                 System.out.println(noNumber);

                 System.out.println("替换之后的结果是:"+youToHer);

                

                 //创建字符串

                                  Stringstr1 = "Let it go!Let it go!Let it go!";

                                  //将第一次出现的"go"替换成"do"

                                  StringnoNumber1 = str1.replaceFirst("go", "do");

                                  //将第二次出现的"go"替换成"do"

                                  StringyouToHer1 = noNumber1.replaceFirst("go", "do");

                                  //输出结果

                                  System.out.println(noNumber1);

                                  System.out.println("替换之后的结果是:"+youToHer1);

        }

}

结果:

I want to marry you, so I need you!
替换之后的结果是:I want to marry her, so I need you!
Let it do!Let it go!Let it go!

替换之后的结果是:Let it do!Let it do!Let it go!

另附常见正则表达式

    (3)字符串分割

            1.split(String str)--根据给定的分隔符对字符串进行拆分,支持正则表达式,最后返回一个字符串数组。语法:a.split(str)

代码实现:

public classStringSplit {

        publicstatic void main(String[] args) {

                 //创建一个字符串

                 Stringstr = "从前有座山,山里有个庙,庙里有个小松鼠";

                 //让字符串按照","进行分割

                 String[]strArray = str.split(",");

                 //使用for循环,循环输出数字所有元素

                 for(int i = 0; i < strArray.length; i++) {

                         System.out.println("数组第" + i+ "索引的元素是:" + strArray[i]);

                 }

        }

}

结果

数组第0索引的元素是:从前有座山
数组第1索引的元素是:山里有个庙

数组第2索引的元素是:庙里有个小松鼠

            2.split(String str,int limit)--根据给定的分隔符对字符串进行拆分,并限定拆分的次数,支持正则表达式。语法:a.split(str,limit)a:任意字符串;str:分隔符表达式;limit:限定的分割次数。

代码实现:

public classStringSplit3 {

        publicstatic void main(String[] args) {

                 //创建字符串

                 Stringstr = "192.168.0.1";

                 //按照"."进行分割

                 String[]firstArray = str.split("\\.");

                 //按照"."进行两次分割

                 String[]secondArray = str.split("\\.", 2);

                 //输出str原值

                 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();

        }

}

结果:

str的原值为:[192.168.0.1]
全部分割的结果:[192][168][0][1]
分割两次的结果:[192][168.0.1]

    (4)大小写转换

            1.toLowerCase()--该方法将字符串转化为小写,没有需要转化的则返回原字符串,否则则生成新的字符串:语法str.toLowerCase();

             2.toUpperCase()--该方法将字符串转化为大写,没有需要转化的则返回原字符串,否则则生成新的字符串:语法str.toUpperCase();

代码实现:

public classStringTransform {

        publicstatic void main(String[] args) {

                 Stringstr = "good morming EVERY ONE"; // 创建字符串

                 System.out.println(str.toUpperCase());// 按照大写格式输出

                 System.out.println(str.toLowerCase());// 按照小写格式输出

        }

}

结果:

GOOD MORMING EVERY ONE
good morming every one

    (5)去除空白内容

            1.trim()--该方法可以返回字符串的副本,忽略首尾处空白。语法:str.trim();

代码实现:

public classStringTrim {

        publicstatic void main(String[] args) {

                 Stringstr = "       abc            ";

                 StringshortStr = str.trim();

                 System.out.println("str的原值是:["+ str + "]");

                 System.out.println("去掉首尾空白的值:["+ shortStr + "]");

        }

}

结果:

str的原值是:[       abc            ]
去掉首尾空白的值:[abc]

    (6)字符串比较

            1.equals(String str);将此字符串与指定的对象比较。

            2.equalsIgnoreCase(String str)--将此字符串与指定的对象比较,不考虑大小写。

代码实现:

public classStringEqualsIgnoreCase {

        public staticvoid main(String[] args) {

                 // 创建字符串对象,内容全部小写

                 String str1 = "abc";

                 // 创建字符串对象,内容全部大写

                 String str2 = "ABC";

                 // 比较两个字符串的内容是否相等

                 System.out.println("区分大小写的结果:"+str1.equals(str2));

                 // 比较两个字符串的内容是否相等,不区分大小写

                 System.out.println("不区分大小写的结果:"+str1.equalsIgnoreCase(str2));

        }

}

结果

区分大小写的结果:false
不区分大小写的结果:true

    (7)字符串格式化--format()方法用于创建格式化字符串

            1.日期与时间格式化

                1.1日期格式化

常用日期格式化转换符

转换符描述体示例
%te一个月中的某一天(1~31)2
%tb指定语言环境的月份简称Feb(英文)、二月(中文)
%tB指定语言环境的月份全称February(英文)、二月(中文)
%tA指定语言环境的星期几全称Monday(英文)、星期一(中文)
%ta指定语言环境的星期几简称Mon(英文)、星期一(中文)
%tc包括全部日期和时间信息Mon Jan 08 06:30:04 UTC 2018
%tY四位年份2018
%ty两位年份18
%tj一年中的第几天(001~366)008
%tm月份(01~12)08
%td一个月中的第几天(01~31)08

                1.2时间格式化

常用时间格式化转换符

转换符描述体示例
%tH2位数字的24小时制的小时(00~23)14
%tI2位数字的12小时制的小时(01~12)05
%tk2位数字的24小时制的小时(1~23)5
%tI2位数字的12小时制的小时(1~12)10
%tM2位数字的分钟(00~59))05
%tS2位数字的秒数(00~60)12
%tL3位数字的毫秒数(000~999)920
%tN9位数字的微秒数(000000000~999999999)062000000000
%tp指定语言环境下上午或下午标记下午(中文)、pm(英文)
%tz相对于GMT RFC 82格式的数字时区偏移量+0800
%tZ时区缩写形式的字符串CST
%ts1970-01-01 00:00:00至现在经过的秒数1206426646
%tQ1970-01-01 00:00:00至现在经过的毫秒数1206426737453

                1.3日期时间组合格式化

常用日期时间格式化组合转换符

转换符描述体示例
%tF“年-月-日”格式(4位年份)2018-01-08
%tD“月/日/年”格式(2位年份)01/08/18
%tr“时:分:秒 PM(AM)”格式(12小时制)15:23:50 PM
%tT“时:分:秒”格式(24小时制)15:23:50
%tR“时:分”格式(24小时制)15:23

            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.C000000000001P4

%n

结果为特定于平台的分割符

 

%%

结果为子面值%

%

 代码实现

public classStringFormat {

        publicstatic void main(String[] args) {

                 //输出字符

                 Stringstr1 = String.format("%c", 'X');

                 System.out.println("字母x大写:" + str1);

                 //输出数字

                 Stringstr2 = String.format("%d", 1251 + 3950);

                 System.out.println("1251+3950的结果是:" +str2);

                 //输出小数点后两位

                 Stringstr3 = String.format("%.2f", Math.PI);

                 System.out.println("π取两位小数点:"+ str3);

                 //输出布尔值

                 Stringstr4 = String.format("%b", 2 < 3);

                 System.out.println("2<3的结果是:" +str4);

                 //输出哈希散列码,等同Integer.toHexString(3015);

                 Stringstr5 = String.format("%h", 3510);

                 System.out.println("3510的hashCode值:" + str5);

                 //输出8进制

                 Stringstr6 = String.format("%o", 33);

                 System.out.println("33的8进制结果是:"+ str6);

                 //输出16进制

                 Stringstr7 = String.format("%x", 33);

                 System.out.println("33的16进制结果是:"+ str7);

                 //输出科学计数法

                 Stringstr8 = String.format("%e", 120000.1);

                 System.out.println("120000.1用科学计数法表示:"+ str8);

                 //输出带有效位数和指数的16进制浮点值

                 Stringstr9 = String.format("%a", 40.0);

                 System.out.println("40.0的十六进制浮点值:"+ str9);

                 //输出百分号和数字

                 System.out.println(String.format("天才是由%d%%的灵感,%d%%的汗水 。", 1, 99));

        }

}

结果

字母x大写:X
1251+3950的结果是:5201
π取两位小数点:3.14
2<3的结果是:true
3510的hashCode值:db6
33的8进制结果是:41
33的16进制结果是:21
120000.1用科学计数法表示:1.200001e+05
40.0的十六进制浮点值:0x1.4p5

天才是由1%的灵感,99%的汗水 。

使用转换符还可以配合转换符标识来控制输出格式

转换符标识

标识

说明

‘-’

在最小的宽度内左对齐,不可以与‘0’填充标识同时使用

‘#’

用于8进制和16进制格式,在8进制前加一个0,在16进制前加一个0x

‘+’

显示数字的正负号

‘’

在正数前面加空格,在负数前加负号

‘0’

在不够最小位数的结果前用0填充

‘,’

只适用于10进制数,没三位数字‘,’分隔

‘(’

用括号吧负数括起来

 代码实现:

public classStringFormat2 {

        publicstatic void main(String[] args) {

                 //让字符串输出的最大长度为5,不足长度在前端补空格

                 Stringstr1 = String.format("%5d", 123);

                 System.out.println("输出长度为5的字符串|" +str1 + "|");

                 //让字符串左对齐

                 Stringstr2 = String.format("%-5d", 123);

                 System.out.println("左对齐|" + str2+ "|");

                 //在8进制前加一个0

                 Stringstr3 = String.format("%#o", 33);

                 System.out.println("33的8进制结果是:"+ str3);

                 //在16进前加一个0x

                 Stringstr4 = String.format("%#x", 33);

                 System.out.println("33的16进制结果是:"+ str4);

                 //显示数字正负号

                 Stringstr5 = String.format("%+d", 1);

                 System.out.println("我是正数:" +str5);

                 //显示数字正负号

                 Stringstr6 = String.format("%+d", -1);

                 System.out.println("我是负数:" +str6);

                 //在正数前补一个空格

                 Stringstr7 = String.format("% d", 1);

                 System.out.println("我是正数,前面有空格"+ str7);

                 //在负数前补一个负号

                 Stringstr8 = String.format("% d", -1);

                 System.out.println("我是负数,前面有负号"+ str8);

                 //让字符串输出的最大长度为5,不足长度在前端补0

                 Stringstr9 = String.format("%05d", 12);

                 System.out.println("前面不够的数用0填充:" + str9);

                 //用逗号分隔数字

                 Stringstr10 = String.format("%,d", 123456789);

                 System.out.println("用逗号分隔:"+ str10);

                 //正数无影响

                 Stringstr11 = String.format("%(d", 13);

                 System.out.println("我是正数,我没有括号:"+ str11);

                 //让负数用括号括起来

                 Stringstr12 = String.format("%(d", -13);

                 System.out.println("我是负数,我有括号的:"+ str12);

        }

}

结果

输出长度为5的字符串|  123|
左对齐|123  |
33的8进制结果是:041
33的16进制结果是:0x21
我是正数:+1
我是负数:-1
我是正数,前面有空格 1
我是负数,前面有负号-1
前面不够的数用0填充:00012
用逗号分隔:123,456,789
我是正数,我没有括号:13
我是负数,我有括号的:(13)

5.5可变字符串

    (1)StringBuffer类的常用方法

            1.创建StringBuffer类--必须使用new方法

            2.append()方法--将参数转化为字符串,将所得字符串中的字符追加到此序列中

            3.setCharAt(int index,char ch)方法--将给定索引处的字符修改为ch

            4.insert(int offset,String str)方法--将字符串插入带索引处

            5.reverse()方法--将字符串反序输出

            6.delete(int start,int end)方法--移除此序列的子字符串中的字符,该子字符串是从索引start处开始到索引end-1处。

            7.其他方法--类似String类的方法

代码展示

public class StrignBufferTest {

        publicstatic void main(String[] args) {

                 StringBuffersbf = new StringBuffer("ABCDEFG");// 创建字符串序列

                 intlenght = sbf.length();// 获取字符串序列的长度

                 charchr = sbf.charAt(5); // 获取索引为5的字符

                 intindex = sbf.indexOf("DEF");// 获取DEF字符串所在的索引位置

                 Stringsubstr = sbf.substring(0, 2);// 截取从索引0开始至索引2之间的字符串

                 StringBuffertmp = sbf.replace(2, 5, "1234");// 将从索引2开始至索引5之间的字符序列替换成"1234"

                 System.out.println("sbf的原值为:" +sbf);

                 System.out.println("sbf的长度为:" +lenght);

                 System.out.println("索引为5的字符为:" +chr);

                 System.out.println("DEF字符串的索引位置为:"+ index);

                 System.out.println("索引0开始至索引2之间的字符串:"+ substr);

                 System.out.println("替换后的字符串为:"+ tmp);

        }

}

结果

sbf的原值为:AB1234FG
sbf的长度为:7
索引为5的字符为:F
DEF字符串的索引位置为:3
索引0开始至索引2之间的字符串:AB
替换后的字符串为:AB1234FG

    (2)StringBuider类的使用方法--StringBuider类和StringBuffer类的使用方法一样

代码实现:

public classStringBuilderTest {

        publicstatic void main(String[] args) {

                 StringBuildersbd = new StringBuilder();

                 System.out.println("sbd的原值为空");

                 sbd.append("我是StringBuilder类");

                 System.out.println("sbd追加字符串:"+ sbd);

                 intlength = sbd.length();

                 System.out.println("sbd的长度为:" +length);

                 sbd= sbd.insert(length - 1, "123456");

                 System.out.println("插入字符串:"+ sbd);

                 sbd= sbd.delete(sbd.length() - 1, sbd.length());

                 System.out.println("删除最后一个字:"+ sbd);

                 sbd= sbd.reverse();

                 System.out.println("反序输出:" +sbd);

        }

}

结果:

sbd的原值为空
sbd追加字符串:我是StringBuilder类
sbd的长度为:16
插入字符串:我是StringBuilder123456类
删除最后一个字:我是StringBuilder123456
反序输出:654321redliuBgnirtS是我

    (3)StringBuffer、StringBuider、String之间的联系

            1.StringBuffer、StringBuider、String互相转换

代码实现:

public class StringInterchange {

   public static voidmain(String[] args) {

      String str = "String";

      // String转换成StringBuffer

      StringBuffer sbf = newStringBuffer(str);

      // String转换成StringBuilder

     StringBuilder sbd = newStringBuilder(str);

      // StringBuffer转换成String

      str = sbf.toString();

      // StringBuilder转换成String

      str = sbd.toString();

      // StringBuffer转换成StringBuilder

      StringBuilder bufferToBuilder = newStringBuilder(sbf.toString());

      // StringBuilder转换成StringBuffer

      StringBuffer builderToBuffer = newStringBuffer(sbd.toString());

   }

} 

            2.StringBuffer、StringBuider、String的不同之处

StringBuffer、StringBuider、String的区别

类名

String

StringBuider

StringBuffer

对象类型

字符串常量

字符串变量

字符串变量

线程安全性

不安全

不安全

安全

执行效率

适用场景:

(1)操作少、数据少,用String。

(2)单线程、操作多、数据多,用StringBuider

(3)多线程、操作多、数据多,用StringBuffer

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值