fiveday_java 字符串、Arrays与Math工具类的学习

1、字符串

/*
程序中的所有的双引号字符串,都是String类的对象。
字符串的特点
1.字符串的内容永不可变
2.正是因为不可变,所以字符串是可以共享使用
3.字符串效果上相当于char[]字符数组,但是底层原理是byte[]字节数组。
创建字符串的3+1种方式
三种构造方法
public String(),
public String(char[] array),
public String(byte[] array),
一种直接创建
String str4="hello";
*/
public class String01 {
  public static void main(String[] args) {
      //使用空参构造
      String str1=new String();
      System.out.println("第一个:"+str1);//第一个:
      //根据字符数组创建
      char[] array={'a','b','c'};
      String str2=new String(array);
      System.out.println("第二个:"+str2);//第二个:abc
      //根据字节数组
      byte[] byteArray={97,98,99};
      String str3=new String(byteArray);
      System.out.println("第三个:"+str3);//第三个:abc
      //直接创建
      String str4="hello";
      System.out.println(str4);//hello
  }
}

2、字符串的常量池

字符串常量池,程序中直接写的双引号字符串,就在字符串常量池中

对于基本类型来说,==是比较值是否相等

对于引用类型来说,==是比较地址值是否相等,

若要进行内容的比较可以使用两种方法

1>public boolean equals(Object obj);参数可以是任意类型

a、 equals方法具有对称性,str1.equals(str2)与str2.equals(str1)是一样的

b、 但是当一个是常量,一个是变量时,

  推荐:"常量".equals(变量)

  不推荐:变量.equals(常量)//会出现空指针报错

2>、public boolean equalsIgnoreCase(String str)//不区分英文大小写

public static void main(String[] args) {
  String str1="abc";
  String str2="abc";
  byte[] byteArray={97,98,99};
  String str3=new String(byteArray);
  System.out.println(str1==str2);//true
  System.out.println(str1==str3);//false
  System.out.println("======================");
  System.out.println(str1.equals(str2));//true
  System.out.println(str1.equals(str3));//true
  System.out.println("======================");
  String str4=null;
  System.out.println("abc".equals(str4));//false
  System.out.println(str4.equals("abc"));//NullPointerException报错 空指针异常
  System.out.println("===================");
  String str5="Java";
  String str6="java";
  System.out.println(str5.equalsIgnoreCase(str6));//true

}

3、字符串常用的获取方法

  • public int length();//获取长度
  • public String concat(String str);//连接字符串
  • public char charAt(int index);//根据索引找字符
  • public int indexof(String str);//在原字符串中找第一次出现字符串str的索引位置
public static void main(String[] args) {
  //快捷键Alt+回车,自动生成变量
  //public int length() 获取长度
  int length = "EDASGRSEGRTSHT".length();
  System.out.println("字符串的长度:"+length);//14
  //拼接字符串
  String str1="hello";
  String str2="world";
  String concat = str1.concat(str2);
  System.out.println(concat);//helloworld
  //获取索引指定位置的单个字符
  char c = "hello".charAt(1);
  System.out.println(c);//e
  //获取字符串在原字符串第一次的索引位置
  String str3="abcdsdsdgeg";
  String str4="abcd";
  int i = str3.indexOf(str4);
  System.out.println(i);//0 "abcd"在字符串的第一位
  System.out.println(str3.indexOf("kl"));//-1 代表没找到

}

4、字符串的截取

public String substring(int index)//[index,最后]

public String substring(int index,int index1)//[index,insex1-1]

System.out.println(str3.substring(5));//dsdgeg
System.out.println(str3.substring(2,4));//cd

5、字符串的转换

  • public char[] toCharArray();//把字符串转换成数组
  • public byte[] getBytes();//把字符串转换成字节数组
  • public String replace(CharSequence oldString,CharSequence newString); //用新字符替换旧字符
public static void main(String[] args) {
  String str1="asdff";
  //把字符串转换成数组
  char[] chars = str1.toCharArray();
  System.out.println(chars[0]);//a
  System.out.println(chars.length);//5
  System.out.println("==================");
  //把字符串转换成字节数组
  byte[] bytes = str1.getBytes();
  System.out.println(bytes[0]);//97
  System.out.println(bytes.length);//5
  //用新字符替换旧字符
  String ff = str1.replace("ff", "**");
  System.out.println(ff);//asd**
}

6、分割字符串

public String[] split(String regex),按照参数规则(正则表达式),将字符串切分成若干份

String str1="aaa,sss,ddd";
String[] array1 = str1.split(",");
for (String s : array1) {
  System.out.print(s);//aaa sss ddd
}
String str2="aaa.ddd.sds";
String[] array2 = str2.split(".");
String[] array3 = str2.split("\\.");
for (String s : array2) {
  System.out.println(s);//无返回值 原因split(正则表达式),”.“在正则表达式里有特殊含义故不可直接写
}
System.out.println("============");
for (String s1 : array3) {
  System.out.print(s1+" ");//aaa ddd sds
}

7、static关键字

如果一个成员变量有个static修饰,那么它不在是一个对象的,而是属于类的,多个对象共用一份数据

static修饰成员方法,调用格式 类名.方法名,静态法方法不可以直接调用方法,必需创建对象。

8、静态代码块

public class 类名称{

static{

//内容

}

}

特点当第一次用到本类的时候,静态代码块执行唯一的一次。静态内容总是优先于非静态,所以静态代码块先执行于构造方法。

用途:用来一次性的对静态成员变量进行赋值

9、Arrays工具类

java.util.Arrays是一个工具类,里面都是静态方法,用来实现数组常见的操作
public static String tostring(数组),将参数变成字符串(按照默认格式[元素1,元素2,元素3...])
public static void sort(数组),默认升序对数组元素排序
备注:
如果是排序数值,则按数字大小排序
如果是字符串,则按字母升序
如果是自定义类,那么这个自定义类需要有Comparable或Coparator接口支持
public static void main(String[] args) {
  //tostring
  int [] nums={1,2,3,4};
  String s = Arrays.toString(nums);//[1, 2, 3, 4]
  System.out.println(s);
  //sort
  int[] num={2,1,3,6,3,4};
  Arrays.sort(num);
  System.out.println(Arrays.toString(num));//[1, 2, 3, 3, 4, 6]

}

练习

//将一个随机字符串中的所有字符升序排列,并倒序输出
String str1="akdeh235435";
char[] strArray = str1.toCharArray();
Arrays.sort(strArray);
//快捷键 strArray.forr 倒叙
for (int i = strArray.length-1;i>=0; i--) {
  System.out.print(strArray[i]+" ");//k h e d a 5 5 4 3 3 2
}

10、Math类

java.util.Math类是与数学运算相关的工具类,里面提供了大量的静态方法。

public static double abs(double num),获取绝对值

public static double ceil(double num),向上取整

public static double floor(double num),向下取整

public static long round(double num),四舍五入

Math.PI圆周率

public static void main(String[] args) {
  System.out.println(Math.ceil(21.9));//22 向上取整
  System.out.println(Math.abs(-0.9));//0.9
  System.out.println(Math.floor(3.5));//3.0
  System.out.println(Math.round(23.4));//23
}
posted @ 2021-06-24 21:02  别不开心,过得去  阅读(40)  评论(0)    收藏  举报