p133 字符串 由浅到深
字符串比较原理:String是引用类型

字符串:内容比较用equals,地址比较用==
package day7.demo1; /*p133-142 *String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。 * 翻译过来:程序中所以的双引号字符串,都是String类的对象(就算没有new) * 字符串的特点: * 1.字符串的内容永不改变 * 2.正因为字符串的内容是不可用改变的,所以字符串是可以共享使用的 * 3.字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组 * 创建字符串的3+1中方式: * 三种构造方法: * 1. public String():创建一个空白字符串,不含任何内容 * 2.public String(char[] array):根据字符数组的内容,来创建对应的字符串 * 3.public String(byte [] array):根据字节数组的内容,来创建对应的字符串 * 直接常见 * String s4="nihoa"; //直接写上“”都是字符串的对象 * */ import com.sun.org.apache.xpath.internal.objects.XString; import java.util.Scanner; public class DemoString { public static void main(String[] args) { //==========================创建方式========================= //方法1: String s1= new String(); System.out.println("第一个字符"+s1); //方法2: char [] s2char=new char[]{'A','B','C'}; String s2= new String(s2char); System.out.println("第二个字符"+s2); //方法三: byte [] bys3=new byte[] {97,98,99}; String s3=new String(bys3); System.out.println("第三个字符"+s3); //直接创建字符串: /*程序中直接写上双引号的字符串,就在字符串常量池中 * 对于基本类型来说,==进行的是数值的比较 * 对于引用类型来说,==是进行地址值的比较 * * * */ String s4="abc"; String s5="abc"; char [] schar=new char[]{'a','b','c'}; String s6=new String (schar); System.out.println(s4==s5); System.out.println(s5==s6); System.out.println(s4==s6); //==========================常用方法========================= /*==是进行地址的比较,如需比较内容,使用 public boolean equals(object obj) 注意:任何对象都能用object接收 equals方法具有对策行a.equals(b)和b.equals(a)一样 如果比较是一个常量一个变量,建议写法: 常量.equals(变量); “abc”.equals(str) 不推介ste.equals("abc"); *public boolean equalsIgnoreCase(String str):忽略大小写,进行比较 * * */ String st1="Hello"; String st2="Hello"; char[] stchar3 = new char[] {'H','e','l','l','o'}; String st3=new String(stchar3); System.out.println("equals比较的是是内容,==比较的是地址值 "+st1.equals(st2));//true System.out.println("equals比较的是是内容,==比较的是地址值 "+st1.equals(st3));//true System.out.println("equals比较的是是内容,==比较的是地址值 "+st1.equals("Hello"));//true System.out.println("Hello".equals("Hello"));//true //=====eauals注意事项========= String st5="abc"; System.out.println("abc".equals("st5"));//true System.out.println(st5.equals("abc"));//true // String st6=null; // System.out.println("abc".equals("st6"));//false,推介把常量写在前面 // System.out.println(st6.equals("abc"));//不推介,报错:空指针异常:NullPointerException,null对象是点不出方法的。 //====equalsIgnoreCase注意事项:只是忽略英文的大小写========= String maxs="ABC"; String mins="abc"; System.out.println(maxs.equals("mins"));//true /*常用方法: public int length():获取字符串当中含有的字符个数,拿到字符串的长度 public String concat(String str):将当前字符串和参数字符串拼接成为返回值新的字符串 public char charAt(int index):获取指定索引位置的单个字符; public int indexOf(String str):查找参数字符串在本字符串当中首次出现的所以位置,如没有返回-1值 public String substring(int index):截取从参数位置一直到字符串的末尾,获取新的字符串 public String substring(int begin,int end):截取从begin开始到end 之间的字符串,[begin,end) public char[] toCharArray();将当前字符串拆分为字符数组作为返回值 public byte[] getBytes();获取当前字符串的底层的字节数组 public String replace (CharSequence oldString ,CharSequence newString);将所以出现的老字符串替换成为新的字符串,返回替换后的结果新字符串 CharSequence:意思是说可以接收字符串类型 public String[] split(String regex):按照参数的规则,将字符串切成为若干部分,regex是一个正则表达式 * */ int length="dddddd".length(); System.out.println("字符串的长度是"+length); //字符串拼接: String str1="HelloHello"; String str2="world"; String str3=str1.concat(str2);//HelloHelloworld System.out.println("拼接后新的字符串是"+str3); //单个字符获取 System.out.println("下标未0的字符是"+str1.charAt(0));//H //查找字符串首次出现位置 System.out.println("llo首次出现的位置是"+str1.indexOf("llo"));//2 //截取到最后 System.out.println("从2开始截取到最后的字符串"+str1.substring(2));//lloHello //截取范围 System.out.println("从2开始截到5"+str1.substring(2,5));//llo //拆分为字符数组 String str5="hello,李宁"; char [] charst5=str5.toCharArray(); for (int i = 0; i < charst5.length; i++) { System.out.println("字符数组第"+i+"个字符是"+charst5[i]); } //字符串变为 获取byte数组 byte [] bytestr5=str5.getBytes(); for (int i = 0; i < bytestr5.length; i++) { System.out.println("byte数组第"+i+"个字符是"+bytestr5[i]); } //替换方法 System.out.println("替换后的字符串:"+ str5.replace("李宁","乔丹")); //分割字符串 String[] split = str5.split(","); for (int i = 0; i < split.length; i++) { System.out.println("split分割后的字符串数组第"+i+"个元素"+split[i]); } String str6="aaa.bbb.ccc.ddd"; String[] split1 = str6.split("\\.");//.在正则表达式中又特俗的含义 for (int i = 0; i < split1.length; i++) { System.out.println("split1分割后的字符串数组第"+i+"个元素"+split1[i]); } //=================深入理解字符串是不变的============== // abc 地址值 ox66 def地址值 0x99 str本来的地址是0x66 变成了0x99 不是字符串变量,不是stra的字符变量,是里边保存的地址值变了; String stra="abc"; System.out.println(stra);//abc stra="def"; System.out.println(stra);//def //=================字符串练习题:获取用户输入的字符串,判断字符串中的大写字母,小写字母,数字,和其他的字符数量============= Scanner sc=new Scanner(System.in); System.out.println("请输入字符串:"); String getscanner=sc.next(); getCharCount(getscanner); } /*方法定义的三要素: 方法的返回值:统计数量,无返回类型 方法的名称:getCharCount 方法的参数:用户输入的字符串 */ public static void getCharCount(String str){ char [] strchar=str.toCharArray(); int upperCount=0; int lowerCount = 0; int numCount=0; int otherCount=0; //循环判断 for (int i = 0; i < strchar.length; i++) { if('a'<=strchar[i]&&strchar[i]<='z'){ lowerCount++; }else if('A'<=strchar[i]&&strchar[i]<='Z'){ upperCount++; }else if('0'<=strchar[i]&&strchar[i]<='9'){ numCount++; }else{ otherCount++; } } System.out.println("输入的大写字母个数数:"+upperCount); System.out.println("输入的小写字母个数数:"+lowerCount); System.out.println("输入的数字个数数:"+numCount); System.out.println("输入的其他字符:"+otherCount); } }
浙公网安备 33010602011771号