概述: 1)、程序经常处理大量文本数据,所以字符串在程序中很常用,很重要。 2)、结构:字符串就是一系列字符组成,可以理解为“字符”数组。 3)、字符串对应String类,是引用数据类型。 字符串: 1、创建:有3种方式:见demo1() 2、连接:有4种方式:见demo2() 说明: *、要求线程安全的情况下,则必须使用StringBuffer类。 *、否则使用StringBuilder类。 *、后面专题细讲。 3、格式字符串,见demo3() 4、日期格式化,见demo4() 5、字符串按字符截取,见demo5() *、见idea提示方法会出错,查api文档。 7、字符串分割为数组,见demo6() 8、字符串替换,见demo7() 9、字符串查找定位,见demo8() 10、字符串比较,见demo9() *、String类是不可变的,因此一旦创建,就无法更改String对象。 *、要对字符串进行大量修改,则应使用StringBuffer和StringBuilder。
package com.iit.demo; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; public class DemoStr { public static void main(String[] args) { //创建字符串的3种方式 //demo1(); //常见属性 //demo2(); //格式化 //demo3(); //日期时间格式化 //demo4(); //字符串截取 //demo5(); //字符串分割到数组 //demo6(); //字符串替换 //demo7(); //字符串查找 demo8(); //字符串比较 //demo9(); } private static void demo9() { //要点:要用equals()方法比较 String str1 = "abc"; String str2 = new String("abc"); String str3 = "ABC"; System.out.println("equals(str2)"+str1.equals(str2)); System.out.println("equals(str3)="+str1.equals(str3)); System.out.println("equalsIgnoreCase(str3)="+str1.equalsIgnoreCase(str3)); } private static void demo8() { String words = "today,monday,sunday"; System.out.println("原始字符串是'"+words+"'"); System.out.println("indexOf(day)结果:"+words.indexOf("day")); System.out.println("indexOf(day,5)结果:"+words.indexOf("day",5)); System.out.println("indexOf(o)结果:"+words.indexOf("o")); System.out.println("indexOf(o,6)结果:"+words.indexOf("o",6)); System.out.println("lastIndexOf(day)结果:"+words.lastIndexOf("day")); } private static void demo7() { String src = "123451234512345"; //将123替换为* String s1 = src.replaceAll("123","*"); System.out.println("s1="+s1); //将1或2或3替换为* //[123]是正则表达式(须专题讲) String s2 = src.replaceAll("[123]","*"); System.out.println("s2="+s2); } private static void demo6() { String Colors = "Red,Black,White,Yellow,Blue"; //通过var生成代码 String[] array1 = Colors.split(","); System.out.println(Arrays.toString(array1)); //只要前3个 问题:现在array2中的值是什么? //回答:最后一个包含了后面所有的字符串。 String[] array2 = Colors.split(",",3); System.out.println(Arrays.toString(array2)); } private static void demo5() { String src = "0123456789"; String str1 = src.substring(3); System.out.println("substring(3)="+str1); String str2 = src.substring(3,2); System.out.println("substring(3,2)="+str2); } private static void demo4() { //打印日期(不建议用String.format打印日期. Date now=new Date(); //注意:规则大小写敏感 String format = "yyyy-MM-dd HH:mm:ss"; showTimeByRule(format); //提示:英语单词固定,其它部分可以随便改。 format = "当前时间:yyyy/MM/dd HH_mm_ss"; showTimeByRule(format); //获取天数、周数等 showTimeByRule("年中的周数:w"); showTimeByRule("月份中的周数:W"); showTimeByRule("月份中的天数:d"); showTimeByRule("年中的天数:D"); showTimeByRule("月份中的星期:F"); showTimeByRule("星期中的天数:E"); } private static void showTimeByRule(String format) { Date now=new Date(); SimpleDateFormat fmt= new SimpleDateFormat(format); String timeStr = fmt.format(now); System.out.printf("格式【%s】=【%s】\n",format,timeStr); } private static void demo3() { //不同的数据类型,对应不同的格式化字符,此处先了解。 String name = "张三"; int age = 22; float height = 1.8532f; String s1 = String.format("姓名:【%s】;年龄:【%d】;身高=【%9.2f】", name,age,height); System.out.println(s1); } //连接字符串 private static void demo2() { //方式1:用+增加(简单场景下使用) String s1 = "aa"; String s2 = "bb"; String s3 = s1+","+s2; //方式2:连续增加:concat String s4 = s1.concat(",").concat(s2); System.out.println("s3="+s3); System.out.println("s4="+s4); //方式3:用StringBuilder(优先考虑,看构造方法) StringBuilder sb1 = new StringBuilder("a1"); sb1.append(",a2"); sb1.append(",a3"); System.out.println("sb1="+sb1); //方式4:用StringBuffer(多线程下考虑,看构造方法) StringBuffer sb2 = new StringBuffer("b1"); sb2.append(",b2"); sb2.append(",b3"); System.out.println("sb2="+sb2); } private static void demox() { String greeting = "我爱java"; int len = greeting.length(); System.out.println( greeting+" 字符串的长度是: " + len ); } private static void demo1() { //方式1 String s1="hello"; //方式2 String s2=new String("java"); //方式3 char[] c1 = { '我','爱','j', 'a', 'v', 'a', 'i' }; String s3=new String(c1); System.out.println("s1+s2="+s1+","+s2); System.out.println("s3="+s3); } }