字符串
字符串的特点:
字符串的内容用不可变
正是因为字符串不可改变,所以字符串是可以共享使用的
字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组
创建字符串的3+1种方法
public String() 创建一个空白字符串,不含有任何内容
public String(char[] array) 根据字符数组的内容,来创建对应的字符串
public String(byte[] array) 根据字节数组的内容,来创建字符串
packagecom.dcits.day07.demo01;
public classDemo01String {public static voidmain(String[] args) {//使用空参构造
String str1 = newString();
System.out.println(str1);//根据字符数组创建
char[] charArray = {'a','b','c'};
String str2= newString(charArray);
System.out.println("第二个字符串" +str2);//根据字节数组串讲
byte[] byteArray = {97,98,99};
String str3= newString(byteArray);
System.out.println(str3);//直接创建
String str4 = "hello";
System.out.println(str4);
}
}
字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中
对于基本类型来说,==是进行数值的比较
对于引用来说,==是进行地址的比较
字符串中的方法:
1.equals
packagecom.dcits.day07.demo02;
public classDemo01Equals {public static voidmain(String[] args) {
String str1= "hello";
String str2= "hello";char[] array = {'h','e','l','l','o'};
String str3= newString(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值
packagecom.dcits.day07.demo02;
public classDemo02StringGet {public static voidmain(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) 包含左边,不包含右边
packagecom.dcits.day07.demo02;
public classDemo03Substring {public static voidmain(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意思就是说可以接受字符串类型
packagecom.dcits.day07.demo02;
public classDemo04Convert {public static voidmain(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方法的参数其实是一个“正则表达式”,如果按照英文句点进行切割,需要写成 \\.
packagecom.dcits.day07.demo02;
public classDemo05Split {public static voidmain(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
//类
packagecom.dcits.day07.demo03;
public classmyClass {intage;staticString name;public voidmethod() {
System.out.println("这是一个普通的成员方法");//成员方法可以访问静态变量
System.out.println(age);
System.out.println(name);
}public static voidmethodStatic() {
System.out.println("这是一个静态方法");
System.out.println(name);//静态方法不能访问成员变量
System.out.println(age);
}
}//调用
packagecom.dcits.day07.demo03;
public classDemo02StaticMethod {public static voidmain(String[] args) {
myClass obj= newmyClass();
obj.method();
//对于静态方法来说可以进行对象名来调用,也可以直接通过类名称调用
myClass.methodStatic();//不推荐
obj.methodStatic();//对于本类中的静态方法,可以省略类名称
myMethod();
}public static voidmyMethod() {
System.out.println("自己的方法");
}
}
静态内存图:
静态代码块
特点:当第一次用到本类时,静态代码块执行唯一的一次,静态代码块比构造方法先执行
//Person类
packagecom.dcits.day07.demo03;
public classPerson {//静态代码块的内容
static{
System.out.println("静态代码块执行!!");
}publicPerson () {
System.out.println("构造方法执行啦!");
}
}//调用
packagecom.dcits.day07.demo03;
public classDemo04Static {public static voidmain(String[] args) {
Person one= newPerson();
Person two= newPerson();
}
}//静态代码块执行!!//构造方法执行啦!//构造方法执行啦!
数组工具类Arrays
注意:
排序时,如果是数值,sort默认按照从小到大,
如果是字符串,sort默认按照字母升序
如果是自定义的类型,那么这个自定义的类需要有Comparable或者Comparator接口的支持
packagecom.dcits.day07.demo04;
importjava.util.Arrays;
public classDemo01Arrays {public static voidmain(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));
}
}
数学工具类
packagecom.dcits.day07.demo04;
public classDemo03Math {public static voidmain(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);
}
}