Java基础之字符串
字符串
字符串的特点:
-
字符串的内容用不可变
-
正是因为字符串不可改变,所以字符串是可以共享使用的
-
字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组
-
public String() 创建一个空白字符串,不含有任何内容
-
public String(char[] array) 根据字符数组的内容,来创建对应的字符串
-
public String(byte[] array) 根据字节数组的内容,来创建字符串
package com.dcits.day07.demo01; public class Demo01String { public static void main(String[] args) { // 使用空参构造 String str1 = new String(); System.out.println(str1); // 根据字符数组创建 char[] charArray = {'a','b','c'}; String str2 = new String(charArray); System.out.println("第二个字符串" + str2); // 根据字节数组串讲 byte[] byteArray = {97,98,99}; String str3 = new String(byteArray); System.out.println(str3); // 直接创建 String str4 = "hello"; System.out.println(str4); } }
字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中
对于基本类型来说,==是进行数值的比较
对于引用来说,==是进行地址的比较
字符串中的方法:
1.equals
package com.dcits.day07.demo02; public class Demo01Equals { public static void main(String[] args) { String str1 = "hello"; String str2 = "hello"; char[] array = {'h','e','l','l','o'}; String str3 = new String(array); System.out.println(str1.equals(str2)); System.out.println(str2.equals(str3)); System.out.println(str3.equals("hello")); System.out.println("hello".equals(str1)); } }
2.public int length() 获取字符串中含有的字符个数,拿到字符串的长度
3.public String concat(String str) 将当前字符串和参数字符串拼接成为返回值新得字符串
4.public char charAt(int index) 获取索引位置的单个字符。(索引从0开始)
5.public int indexof(string str) 查找参数字符串在本地字符串当中首次出现的索引位置,如果没有返回-1值
package com.dcits.day07.demo02; public class Demo02StringGet { public static void main(String[] args) { // 获取字符串的长度 int length = "zczxcasadsadadsad".length(); System.out.println("字符串的长度:" + length); // 拼接字符串 String str1 = "hello"; String str2 = "world"; String str3 = str1.concat(str2); System.out.println(str1); System.out.println(str2); System.out.println(str3); // 获取指定索引位置的单个字符 char ch = "Hello".charAt(1); System.out.println("在1号索引位置的字符是:" + ch); // 查找参数字符串在本来字符串当中出现的第一次索引位置 // 如果根本没有,就返回 -1 值 String original = "HelloWorld"; int index = original.indexOf("llo"); System.out.println("第一次的索引值是:" + index); System.out.println("HelloWOrld".indexOf("abc")); } }
6.public String substring(int index) 截取从参数位置一直到字符串末尾,返回新字符串
public String substring(int begin,int end) 截取从begin开始,一直到end结束,中间的字符串
注意: [begin,end) 包含左边,不包含右边
package com.dcits.day07.demo02; public class Demo03Substring { public static void main(String[] args) { String str1 = "HelloWorld"; String str2 = str1.substring(5); System.out.println(str1); System.out.println(str2); String str3 = str1.substring(4,7); System.out.println(str3); String strA = "Hello"; System.out.println(strA); strA = "Java"; System.out.println(strA); } }
7.public char[] toCharArray() 将当前字符串拆分为字符数组作为返回值
public byte[] getBytes() 获得当前字符串底层的字节数组
public String replace(CharSequence oldString,CharSequence newString) 将所有出现的老字符串替换成为新的字符串 ,返回替换之后的结果新字符串
注意:CharSequence意思就是说可以接受字符串类型
package com.dcits.day07.demo02; public class Demo04Convert { public static void main(String[] args) { // 转换成为字符数组 char[] chars = "Hello".toCharArray(); System.out.println(chars[0]); System.out.println(chars.length); // 转换成为字节数组 byte[] bytes = "abc".getBytes(); for (int i = 0; i < bytes.length; i++) { System.out.println(bytes[i]); } // 字符串的内容替换 String str1 = "How do you do?"; String str2 = str1.replace("o","*"); System.out.println(str1); System.out.println(str2); String lang1 = "会不会玩呀,你大爷的!"; String lang2 = lang1.replace("你大爷的","****"); System.out.println(lang2); } }
8.public String[] split(String regex) 按照参数的规则,将字符串切分成为若干部分
注意:split方法的参数其实是一个“正则表达式”,如果按照英文句点进行切割,需要写成 \\.
package com.dcits.day07.demo02; public class Demo05Split { public static void main(String[] args) { String str1 = "aa,bbb,ccc,ddd"; String[] array1 = str1.split(","); for (int i = 0; i < array1.length; i++) { System.out.println(array1[i]); } String str3 = "XXX.YYY.ZZZ"; String[] array3 = str3.split("\\."); for (int i = 0; i < array3.length; i++) { System.out.println(array3[i]); } } }
静态static关键字
一旦使用了static关键字,那么这样的内容不再属于对象自己,而是属于类的,所以凡是本类的对象,都共享一份
一旦使用了static修饰成员方法,那么这就成为了静态方法,静态方法并不属于对象,而是属于类的。对于静态方法来说可以进行对象名来调用,也可以直接通过类名称调用
无论是成员变量还是成员方法,如果有了static,都推荐使用类名称进行调用。
-
静态变量:类名称.静态变量
-
静态方法:类名称.静态方法
注意:
-
静态不能直接访问非静态
-
静态方法中不能使用this
// 类 package com.dcits.day07.demo03; public class myClass { int age; static String name; public void method() { System.out.println("这是一个普通的成员方法"); // 成员方法可以访问静态变量 System.out.println(age); System.out.println(name); } public static void methodStatic() { System.out.println("这是一个静态方法"); System.out.println(name); // 静态方法不能访问成员变量 System.out.println(age); } } // 调用 package com.dcits.day07.demo03; public class Demo02StaticMethod { public static void main(String[] args) { myClass obj = new myClass(); obj.method(); // 对于静态方法来说可以进行对象名来调用,也可以直接通过类名称调用 myClass.methodStatic(); // 不推荐 obj.methodStatic(); // 对于本类中的静态方法,可以省略类名称 myMethod(); } public static void myMethod() { System.out.println("自己的方法"); } }
静态内存图:
静态代码块
特点:当第一次用到本类时,静态代码块执行唯一的一次,静态代码块比构造方法先执行
// Person类 package com.dcits.day07.demo03; public class Person { // 静态代码块的内容 static { System.out.println("静态代码块执行!!"); } public Person () { System.out.println("构造方法执行啦!"); } } // 调用 package com.dcits.day07.demo03; public class Demo04Static { public static void main(String[] args) { Person one = new Person(); Person two = new Person(); } } // 静态代码块执行!! // 构造方法执行啦! // 构造方法执行啦!
数组工具类Arrays
注意:
-
排序时,如果是数值,sort默认按照从小到大,
-
如果是字符串,sort默认按照字母升序
-
如果是自定义的类型,那么这个自定义的类需要有Comparable或者Comparator接口的支持
package com.dcits.day07.demo04; import java.util.Arrays; public class Demo01Arrays { public static void main(String[] args) { // Arrays中的默认格式转换成为字符串 int[] Array = {10,20,30}; String intStr = Arrays.toString(Array); System.out.println(intStr); // Arrays中的排序方法 int[] array1 = {2,6,1,3,5}; Arrays.sort(array1); System.out.println(Arrays.toString(array1)); String[] array2 = {"bbb","aaa","ccc"}; Arrays.sort(array2); System.out.println(Arrays.toString(array2)); } }
数学工具类
package com.dcits.day07.demo04; public class Demo03Math { public static void main(String[] args) { // 获取绝对值 System.out.println(Math.abs(-2.1)); // 向上取整 System.out.println(Math.ceil(3.1)); // 向下取整 System.out.println(Math.floor(3.9)); // 四舍五入 System.out.println(Math.round(20.5)); System.out.println(Math.round(3.33)); // Π System.out.println(Math.PI); } }