JAVA12-Scanner类、Random类、ArrayList类、String类、static、Arrays类、Math类、静态方法

1.类 Scanner

1.1.引用类型的使用步骤

(1)导包 : import 包路径.类名称;// 导包语句在package语句之后,public之前写。

此前我们学习到如果需要使用的目标类,和当前类位于同一个包下,则可以省略导包语句不写。现在更正一点:只有java.lang包下的内容,不需要导包即可使用,如String就是java.lang下。

(2)创建对象

类名称 对象名 = new 类名称();如果它需要构造方法的参数,那括号类需要写参数;

(3)使用对象

对象名.成员方法名();如果需要传参,我们在括号内加参;

      当我们在api文档中找到对应的api类,主要看三点内容:包路径、构造方法、方法

1587342540(1)

1.2.Scanner类

通过Scanner类构造方法得知,Scanner类构造方法均含参,其中 system.in

1587343066(1)

比方说 获取键盘输入的一个数字,其中返回的值中看到有int,其中int radix是进制,暂时不用

1587343209(1)

其中:String字符串比较特殊,不是nextString();没有这个方法

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.Scanner;
  3 public class Demo05Scanner01 {
  4     public static void main(String[] args) {
  5         Scanner sc = new Scanner(System.in);// 创建对象
  6         int s = sc.nextInt();//获取键盘输入的一个int数字
  7         String str = sc.next();// String字符串比较特殊,不是nextString();没有这个方法
  8         System.out.println("输入的int数字是"+s);
  9         System.out.println("输入的字符串是"+str);
 10     }
 11 }

实际上我们键盘录入的都是字符串,只是nextInt将字符串转化为int类型数字。

练习:键盘输入两个数字,求和

分析:既然是键盘输入,则用到Scanner

         Scanner三步骤:导包、创建、使用方法

         既然是三个数字,类型一致,则不需要创建三次对象,调用三次nextInt()方法即可

         无法同时判断三个数字谁最大,第一步判断前面两个,再和第三个比较


  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.Scanner;
  3 public class Demo05Scanner02Sum {
  4     public static void main(String[] args) {
  5         Scanner sc = new Scanner(System.in);
  6         System.out.println("请输入数字a的值");
  7         int a = sc.nextInt();// 第一次调用nextInt()
  8         System.out.println("请输入数字b的值");
  9         int b = sc.nextInt();// 第二次调用nextInt()
 10         int sum = a + b;
 11         System.out.println("输入数字:"+a+"输入的数字:" + b +"的和是:"+ sum);
 12     }
 13 }
 14 
  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.Scanner;
  3 public class Demo05Scanner02Sum {
  4     public static void main(String[] args) {
  5         Scanner sc = new Scanner(System.in);
  6         System.out.println("请输入数字a的值");
  7         int a = sc.nextInt();// 第一次调用nextInt()
  8         System.out.println("请输入数字b的值");
  9         int b = sc.nextInt();// 第二次调用nextInt()
 10         System.out.println("请输入数字b的值");
 11         int c = sc.nextInt();// 第三次调用nextInt()
 12         int temp = a > b ? a : b;// 三元运算符
 13         int max = temp > c ? temp : c;
 14         System.out.println("输入数字:"+a+"输入的数字:" + b +"的和是:"+ max);
 15     }
 16 }

1.3.匿名对象

一般来说:创建对象的标准格式:

类名称  对象名 = new 类名称();

匿名对象就是只有右边的对象,没有左边的名字和运算符,且匿名对象只能用一次。

标准的对象如下图:

  1 package cn.itcast.demo01.demo01.demo05;
  2 public class Demo05person {
  3     public static void main(String[] args) {
  4         Person per = new Person();
  5         per.name = "高圆圆";// 变量赋值
  6         per.show();// 调用方法
  7     }
  8 }
  9 
  1 package cn.itcast.demo01.demo01.demo05;
  2 
  3 public class Person {
  4     String name;
  5     public void show(){
  6         System.out.println("我叫:" + name);
  7     }
  8 }
  9 

匿名对象只能用唯一一次

  1 package cn.itcast.demo01.demo01.demo05;
  2 public class Demo05person {
  3     public static void main(String[] args) {
  4         Person per = new Person();
  5         per.name = "高圆圆";// 变量赋值
  6         per.show();// 调用方法
  7         new Person().name = "赵又廷";
  8         new Person().show();// 结果是null,因为这是新对象,string默认null
  9     }
 10 }

匿名对象与常规对象的比对:可见,如果对象只用一次,匿名对象将简单许多。

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.Scanner;
  3 public class Demo05person {
  4     public static void main(String[] args) {
  5         // 常规对象使用
  6         Scanner sc = new Scanner(System.in);
  7         int a = sc.nextInt();
  8         System.out.println(a);
  9         System.out.println("========");
 10         // 匿名对象使用
 11         int b = new Scanner(System.in).nextInt();
 12         System.out.println(b);
 13     }
 14 }
 15 

1.3.1.匿名对象是否可以作为方法的参数调用或方法的返回值呢?

当然可以

       匿名对象进行传参时,使用匿名对象作为参数的方法的参数类型必须是匿名对象的类型,参数名称一般用匿名对象类型的简写,以便记忆。从而使用方法的参数名进行调用匿名对象的类型的自带方法,进一步完成方法的功能。

      匿名对象作为返回值类型时,则该方法的返回值类型必须是匿名对象的类型,而在调用该方法时,需要重新创建对象并给予对象取名,从而使用匿名对象所属类的方法。

image

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.Scanner;
  3 public class Demo05person {
  4     public static void main(String[] args) {
  5         // 使用匿名对象传参
  6         scannerMethod(new Scanner(System.in));
  7         // 使用返回的匿名对象
  8         Scanner  sc = methodReturn();// 谁调用我,我就讲sc返回给谁
  9         int num = sc.nextInt();
 10         System.out.println("使用返回的匿名对象来创建的对象输入的值" + num);
 11     }
 12     public static void scannerMethod(Scanner sc){// 因为接受Scanner对象,所以参数类型就用Scanner sc
 13         int num  = sc.nextInt();// 调用方法nextInt,获取输入的值
 14         System.out.println("输入的是:" + num);// 打印输入的值
 15     }
 16     // 使用匿名对象作为返回值,既然是返回值匿名对象且是Scanner
 17     public static Scanner methodReturn(){  //返回值类型是匿名对象
 18 //        Scanner sc = new Scanner(System.in);// 常规创建对象
 19 //        return sc;
 20         return new Scanner(System.in);
 21     }
 22 
 23 }


2.Random类 产生随机的数

引用类型,使用Random类也是三步;

  • 导包 import java.lang.util.Random
  • 创建 Random r = new Random();就是初始化其构造方法,random比较简单就两个构造方法。

1587352187(1)

  • 使用 比方说 :t num = r.nextInt();


  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.Random;
  3 import java.util.Scanner;
  4 public class Demo05person {
  5     public static void main(String[] args) {
  6         Random r = new Random();
  7         int num = r.nextInt();
  8         System.out.println("随机数是:"+num);
  9     }
 10 }
 11 

        Random中int类型的另外一个方法nextInt(int n) 参数n代表左闭右开开关int num = r.nextInt(3)代表的含义是【0,3)也就是0,1,2。类似于数组的长度

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.Random;
  3 import java.util.Scanner;
  4 public class Demo05person {
  5     public static void main(String[] args) {
  6         Random r = new Random();
  7         for (int i = 0; i < 100; i++) {
  8             int num = r.nextInt(100);
  9             System.out.println("随机数字是:" + num);
 10         }
 11     }
 12 }
 13 

练习:随机取 1-N的数字,也就是左闭右闭的区间。

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.Random;
  3 import java.util.Scanner;
  4 public class Demo05person {
  5     public static void main(String[] args) {
  6         Random r = new Random();
  7         for (int i = 0; i < 100; i++) {
  8             int num = r.nextInt(100)+ 1;
  9             System.out.println("随机数字是:" + num );
 10         }
 11     }
 12 }

练习:用代码模拟猜数字的小游戏

思路:1.首先产生一个随机数字,并且一旦产生不能变化,用Random的nextInt方法

         2.需要键盘输入,使用Scanner,使用Scanner的nextInt方法

         3.既然是比较数字猜没猜对,就可以用if,考虑是多循环,可以用while来进行

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.Random;
  3 import java.util.Scanner;
  4 public class Demo05person {
  5     public static void main(String[] args) {
  6         Random r = new Random();
  7         int randomNum = r.nextInt(100)+1;
  8         Scanner sc = new Scanner(System.in);
  9         while(true){
 10             System.out.println("请输入你猜测的数字");
 11             int num = sc.nextInt();
 12             if (num > randomNum){
 13                 System.out.println("太大了");
 14             }else if(num < randomNum){
 15                 System.out.println("太小了");
 16             }else {
 17                 System.out.println("恭喜你,猜中了");
 18                 System.out.println("随机数是:" + randomNum);
 19                 break;
 20             }
 21         }
 22         System.out.println("游戏结束");
 23     }
 24 }
 25 

假设使用指定次数猜测,则while不建议使用,我们可以用for循环。

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.Random;
  3 import java.util.Scanner;
  4 public class Demo05person {
  5     public static void main(String[] args) {
  6         Random r = new Random();
  7         int randomNum = r.nextInt(100)+1;
  8         Scanner sc = new Scanner(System.in);
  9         for (int i = 0; i < 10; i++) {
 10             System.out.println("请输入你猜测的数字");
 11             int num = sc.nextInt();
 12             if (num > randomNum){
 13                 System.out.println("太大了");
 14                 int a = 9 - i;
 15                 System.out.println("你还剩余"+ a + "");
 16             }else if(num < randomNum){
 17                 System.out.println("太小了");
 18                 int a = 9 - i;
 19                 System.out.println("你还剩余"+ a + "");
 20             }else {
 21                 System.out.println("恭喜你,猜中了");
 22                 System.out.println("随机数是:" + randomNum + "你使用了" + i + "");
 23                 break;
 24             }
 25         }
 26         System.out.println("游戏结束");
 27     }
 28 }

3.对象数组

练习:定义一个数组,用来存储对象。

格式:对象类型【】 数组名 = new 对象类型【】;对象数据的元素是地址值

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.Random;
  3 import java.util.Scanner;
  4 public class Demo05person {
  5     public static void main(String[] args) {
  6         // 常规数据类型的数组定义格式如下:
  7         int[] ar = new int[3];
  8         System.out.println(ar[0]);// 默认值是0
  9         //而对象数组呢;首先创建一个长度为3的数组,里面用来存放Person类型的对象
 10         Person [] array = new Person[3];
 11         System.out.println(array[0]);// 引用类型的默认值是null
 12         Person one = new Person("张欢",19);// one实际上地址值
 13         Person two = new Person("张欢",19);
 14         array[0] = one;// 将one当中的地址值给0号元素
 15         Person p = array[0];
 16         System.out.println(array[0].getName()+array[0].getAge());
 17         System.out.println(p.getName()+p.getAge());
 18     }
 19 }
  1 package cn.itcast.demo01.demo01.demo05;
  2 
  3 public class Person {
  4     private String name;
  5     private int age;
  6 
  7     public Person() {
  8     }
  9 
 10     public Person(String name, int age) {
 11         this.name = name;
 12         this.age = age;
 13     }
 14 
 15     public String getName() {
 16         return name;
 17     }
 18 
 19     public void setName(String name) {
 20         this.name = name;
 21     }
 22 
 23     public int getAge() {
 24         return age;
 25     }
 26 
 27     public void setAge(int age) {
 28         this.age = age;
 29     }
 30 }
 31 

      目前为止,我们想存储对象数据,选择的容器,只有对象数组。而数组的长度是固定的,无法适应数据变化的需 求。为了解决这个问题,Java提供了另一个容器 java.util.ArrayList 集合类,让我们可以更便捷的存储和操作对 象数据。 而ArrayLst集合却可以。从名字可以看出,每个首字母大写,说明ArrayList是个类。

ArrayList<泛型> 集合名 = new Arraylist<>();

ArrayLIST<String> list = new ArrayList<java1.开始,此处可不写泛型>();

注意: 泛型只能是引用类型,不能是基本类型,且list直接打印为空【】,不是地址值,特殊处理。参考后面toString()方法。


      java.util.ArrayList 是大小可变的数组的实现,存储在内的数据称为元素。此类提供一些方法来操作内部存储 的元素。 ArrayList 中可不断添加元素,其大小也自动增长

1587359753(1)

1587359935(1)

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.ArrayList;
  3 import java.util.Random;
  4 import java.util.Scanner;
  5 public class Demo05person {
  6     public static void main(String[] args) {
  7         // 创建一个ArrayList集合,集合名字是list
  8         ArrayList<String> list = new ArrayList<>();
  9         // 打印ArrayList集合的名字list,结果为【】,此为内容,不是地址值。
 10         System.out.println(list);
 11 
 12         // 现在使用集合,向集合list中添加元素
 13         list.add("张华");
 14         list.add("李华");
 15         list.add("王华");
 16         list.add("胡华");
 17         System.out.println(list);// 结果是 [张华, 李华, 王华, 胡华] 逗号分隔
 18     }
 19 }
 20 

       造ArrayList对象时, <E> 指定了什么数据类型,那么 add(E e) 方法中,只能添加什么数据 类型的对象。常用的方法是:

public boolean add<E e>:向集合中添加元素,参数类型和泛型一致。返回是否成功。

        boolean success = list.add(“字符串”);// boolean类型接收返回值

在ArrayList中,add动作一定成功,所以返回值可用可不用,但其他集合不一定。

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.ArrayList;
  3 import java.util.Random;
  4 import java.util.Scanner;
  5 public class Demo05person {
  6     public static void main(String[] args) {
  7         // 创建一个ArrayList集合,集合名字是list
  8         ArrayList<String> list = new ArrayList<>();
  9         // 打印ArrayList集合的名字list,结果为【】,此为内容,不是地址值。
 10         System.out.println(list);
 11 
 12         // 现在使用集合,向集合list中添加元素
 13        boolean success = list.add("张华");
 14         list.add("李华");
 15         list.add("王华");
 16         list.add("胡华");
 17         System.out.println(list);// 结果是 [张华, 李华, 王华, 胡华] 逗号分隔
 18         System.out.println(success);
 19     }
 20 }

public E get(int index):从集合中读取元素,参数是索引编号,返回值是对应位置的元素,接收的类型需要与泛型一致。

  1         String str = list.get(2);
  2         System.out.println(str);
  3         System.out.println(list.get(0));

public E remove(int index):从集合中删除元素,参数是索引编号,返回值是被删除掉的元素,接收类型需要与泛型一致

  1         String who = list.remove(0);// 返回值是删除的元素
  2         System.out.println(who);// 返回删除的元素
  3         System.out.println(list);

public int size();获取集合的尺寸长度,返回值是集合中包含的元素个数,数组的长度点length是没有括号的,而集合点size有括号。

  1         int size = list.size();// 获取集合的长度
  2         System.out.println(size);

练习:遍历一个集合

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.ArrayList;
  3 import java.util.Random;
  4 import java.util.Scanner;
  5 public class Demo05person {
  6     public static void main(String[] args) {
  7         ArrayList<String> list = new ArrayList<>();
  8         list.add("");
  9         list.add("");
 10         list.add("");
 11         list.add("");
 12         for (int i = 0; i < list.size(); i++) {
 13             System.out.println(list.get(i));
 14         }
 15     }
 16 }
 17 

3.3.yList集合中存放基本数据类型的办法

如果想在集合ArrayList中,存放基本数据类型,必须使用基本类型的对应的包装类。包装类与基本类型的对应关系。都在java.lang包下,不需要导入。

基本类型 基本类型包装类
byte         Byte
short        Short
int           Integer
long         Long
float         Float
double      Double
char         Character
boolean     Boolean

java1.5开始,支持自动包箱: 基本类型→包装类型,支持自动拆箱: 包装类型→基本类型

练习:包装类与集合联合 成6个1-33的随机数,添加到集合,并遍历集合

1.随机数 Random类,2。整数添加到集合,包装类,3.遍历集合for

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.ArrayList;
  3 import java.util.Random;
  4 import java.util.Scanner;
  5 public class Demo05person {
  6     public static void main(String[] args) {
  7         Random r = new Random();
  8         ArrayList<Integer> list = new ArrayList<>();
  9         for (int i = 0; i < 6; i++) {
 10             list.add(r.nextInt(33)+ 1 );
 11         }
 12         for (int i = 0; i < list.size(); i++) {
 13             System.out.println(list.get(i));
 14         }
 15     }
 16 }

练习 对象作为集合元素 定义4个学生对象,添加到集合,并遍历。

1.自定义学生类,并创建4个对象

2.创建集合,并用add方法添加对象进集合中

3.遍历集合中的对象,需要用get方法,而返回值类型需要用对象原来类型创建对象接收get值。

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.ArrayList;
  3 
  4 public class Demo05person {
  5     public static void main(String[] args) {
  6         ArrayList<Student> list = new ArrayList<>();
  7         // 创建4个对象
  8         Student one = new Student("",21);
  9         Student two = new Student("",22);
 10         Student three = new Student("",23);
 11         Student four = new Student("",24);
 12         // 将4个对象放进集合中
 13         list.add(one);
 14         list.add(two);
 15         list.add(three);
 16         list.add(four);
 17         for (int i = 0; i < list.size() ; i++) {
 18             // 创建对象stu,指向list集合对应的对象
 19             Student stu = list.get(i);
 20             //
 21             System.out.println(stu.getName()+stu.getAge());
 22         }
 23 
 24 
 25     }
 26 }
 27 

练习:集合作为参数,传递是地址值:定义一个打印集合的方法(而ArrayLst类型作为参数传递进打印方法中),结果使用{}扩起结果,使用@分割每个元素,格式参照{元素@元素@元素}

1.main中创建集合,并赋值;

2.创建方法使用集合作为传参,在方法内部进行遍历,

3.main中调用方法

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.ArrayList;
  3 
  4 public class Demo05person {
  5     public static void main(String[] args) {
  6         ArrayList<String> list = new ArrayList<>();//
  7         //
  8         list.add("张三丰");
  9         list.add("张无极");
 10         list.add("张大华");
 11         System.out.println(list);// 直接打印 [张三丰, 张无极, 张大华]
 12         printArrayList(list);
 13 
 14     }
 15     /*
 16     定义方法的三要素
 17     返回值类型  用void
 18     参数列表    集合 ArrayList
 19     方法名称  printArrayList
 20      */
 21     public static void printArrayList(ArrayList<String> list){// 泛型加上,保持一致
 22         System.out.print("{");
 23         for (int i = 0; i < list.size(); i++) {
 24             if (i == list.size() -1){
 25                 String str = list.get(i);
 26                 System.out.println(str+"}");
 27             }else {
 28                 String str = list.get(i);
 29                 System.out.print(str+"@");
 30             }
 31         }
 32     }
 33 }
 34 

练习 集合元素筛选的问题  定义获取所有偶数元素集合的方法(ArrayList类型作为返回值)

用一个大集合,存入20个随机数字,然后筛选其中偶数的元素,并将偶数元素放入到小集合当中,要求使用自定义方法进行筛选。

1.创建大集合,Random类的20个随机数字,并输入。创建小集合

2.创建方法,遍历大集合,并将其中偶数放入小集合。

    方法 三要输:返回值类型 集合,方法名称 偶数,参数列表 大集合。

3.输出小集合。

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.ArrayList;
  3 import java.util.Random;
  4 
  5 public class Demo05person {
  6     public static void main(String[] args) {
  7         ArrayList<Integer> list = new ArrayList<>();//
  8         Random r = new Random();
  9         for (int i = 0; i < 20; i++) {
 10             int num = r.nextInt(100) + 1;// 100以内
 11             list.add(num);
 12         }
 13         // 原始随机值的集合
 14         System.out.println(list);
 15         // 偶数的值的集合
 16         System.out.println(getSmall(list));
 17     }
 18     public static ArrayList<Integer> getSmall(ArrayList<Integer> list){
 19         ArrayList<Integer> samlllist = new ArrayList<>();
 20         for (int i = 0; i < list.size(); i++) {
 21             int num = list.get(i);
 22             if (num % 2 == 0){
 23                 samlllist.add(num);
 24             }
 25         }
 26         return samlllist;
 27     }
 28 }
 29 
 30 
 31 


4.String类 java.lang包中。

       String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。 也就是说双引号的字符串,都是String类的对象。

       字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。例如:

String str = "abc"; 等效于:不可变 
char data[] = {'a', 'b', 'c'};  不可变 

String str = new String(data); 不可变

字符串效果上相当于是char[]的字符数组,但底层原理是byte[] 字节数组。



4.1.创建字符串的3+1构造方法

  • public String()  初始化一个新创建的 String 对象,一个空字符序列。创建一个空白字符串
  • public String(char[] value) 分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。根据char字符数组的内容,来创建对应的字符串。
  • public String(byte[] bytes)  通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。根据字节数组的内容,来创建对应的字符串。
  • String str = “hello“,这也是字符串对象。
  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.ArrayList;
  3 import java.util.Random;
  4 
  5 public class Demo05person {
  6     public static void main(String[] args) {
  7         //使用空参构造
  8         String str = new String();// 小括号留空,说明字符串内容都没有
  9         System.out.println("第一个字符串:" + str);
 10         // 使用字符数组创建字符串
 11         char[] array1 = {'a','b','c'};
 12         String str2 = new String(array1);
 13         System.out.println("第二个字符串:" + str2);
 14         // 使用字节数组创建字符串
 15         byte[] by = {97,98,99};
 16         String str3 = new String(by);
 17         System.out.println("第二个字符串:" + str3);
 18     }
 19 }
 20 



4.2 字符串的常量池

字符串共享,就需要字符串的常量池。程序中直接写上双引号就在字符串常量池中。


image

4.3.字符串的常用方法-内容比较

==是用来进行字符串对象的地址值比较,那么如果需要进行内容的比较该如何进行呢,可以考虑使用两个方法来进行。

  • public boolean equals(Object obj) 区分大小写,参数是任何对象类型。任何对象都能用object。只有参数是一个对象,且内容相同才会返回true,否则返回false;

注意事项 equals方法具有对称性,a.equals(b)和b.equals(a)一样。

            equals方法中,建议常量点equals,否则出现null点equals会报错。

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.ArrayList;
  3 import java.util.Random;
  4 
  5 public class Demo05person {
  6     public static void main(String[] args) {
  7         String str1 = "hello";
  8         String str2 = "hello";
  9         char[] charArray = {'h','e','l','l','o'};
 10         String str3 = new String(charArray);// 创建字符串对象,数组
 11         System.out.println(str1.equals(str2));// true
 12         System.out.println(str1.equals(str3));//true
 13         System.out.println(str3.equals(str2));// true
 14 
 15     }
 16 }
 17 
 18 
 19 
  • public boolean equalsIgonreCase(Object obj)不区分大小写进行比较。参数是任何对象类型。任何对象都能用object。只有参数是一个对象,且内容相同才会返回true,否则返回false;
  1         String str4 = "Hello";
  2         System.out.println(str1.equalsIgnoreCase(str4));


4.3.字符串的常用方法-获取方法

public int length() 获取字符串中含有的字符个数,拿到字符串长度

public String concat(String str ) 将当前字符串与参数字符串拼接新字符串且返回拼接。

public char charAt(int index)获取指定索引未知的单个字符(从0开始)。

public int indexOf(String str) 查找参数字符串在本字符串当中首次出现的索引未知,如果没有返回-1.

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.ArrayList;
  3 import java.util.Random;
  4 
  5 public class Demo05person {
  6     public static void main(String[] args) {
  7         String str1 = "hello";
  8         String str2 = "hello";
  9         char[] charArray = {'h','e','l','l','o'};
 10         String str3 = new String(charArray);// 创建字符串对象,数组
 11         System.out.println(str1.length());// length() 返回字符串长度
 12         System.out.println(str1.concat(str3));//concat进行拼接
 13         System.out.println(str1.charAt(1));// charAt方法获取索引1号的元素
 14         System.out.println(str1.indexOf('l'));// indexOf方法获取字符串的位置。没有返回-1
 15 
 16     }
 17 }
 18 
 19 
 20 

4.4字符串的常用方法-截取方法

public String substring(int index) 截取从参数未知开始一直到字符串结束

public String subString (int begin,int end)截取从begin开始,一直到end结束,中间的字符串。左闭右开区间【2,4)就是第三和第四个元素,没有第五个元素。

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.ArrayList;
  3 import java.util.Random;
  4 
  5 public class Demo05person {
  6     public static void main(String[] args) {
  7         String str1 = "hello";
  8         String str2 = str1.substring(2);// 截取索引2以后字符,组成新字符串
  9         System.out.println(str1);
 10         System.out.println(str2);
 11         String str3 = str1.substring(1,3);// 截取索引1至2的字符,组成新字符串
 12         System.out.println(str1);
 13         System.out.println(str3);
 14     }
 15 }


4.5.符串的常用方法-转换方法

public char[] toCharArray(); 将当前字符串拆分成为字符数组作为返回值;

public byte[] getBytes();获得当前字符串底层的字节数组

public String replace( CharSequence oldString , CharSequence newString)将所有出现的老字符串体会成为新的字符串,返回替换后的结果是新字符串

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.ArrayList;
  3 import java.util.Random;
  4 
  5 public class Demo05person {
  6     public static void main(String[] args) {
  7         String str1 = "hello";
  8         char[] chars = str1.toCharArray();// 将当前字符串拆分成为字符数组作为返回值;
  9         System.out.println(chars);        //  打印
 10         System.out.println(chars.length);
 11         byte[] byte1 = str1.getBytes();// 获得当前字符串底层的字节数组
 12         System.out.println(byte1[0]);// 打印
 13 
 14        String str2 = "how do you do ?";
 15        //   将所有出现的老字符串体会成为新的字符串,返回替换后的结果是新字符串
 16        String str3 = str2.replace('o','w');
 17         System.out.println(str2);
 18         System.out.println(str3);
 19     }
 20 }
 21 
 22 
 23 

4.5.符串的常用方法-分割方法

public String[] split(String regex):按照参数的规则,将字符串分成若干部分,这个regex实际上是正则表达式,切割英文句点有问题。必须用\\。来进行转义

  1 package cn.itcast.demo01.demo01.demo05;
  2 import java.util.ArrayList;
  3 import java.util.Random;
  4 public class Demo05person {
  5     public static void main(String[] args) {
  6         String str = "aaa,bbb,ccc";
  7         String[] array1 = str.split(",");
  8 
  9         for (int i = 0; i < array1.length;i++) {
 10             System.out.println(array1[i]);
 11         }
 12     }
 13 }
 14 

aaa
bbb
ccc

练习:定义一个方法,把数组{1,2,3}按照指定个格式拼接成一个字符串。格式参照如下:[word1#word2#word3]。切记 字符串相加就是拼接

  1 package cn.itcast.demo01.demo01.demo05;
  2 
  3 import java.util.ArrayList;
  4 import java.util.Random;
  5 
  6 public class Demo05person {
  7     public static void main(String[] args) {
  8         int[] array = {1, 2, 3,4};
  9         String str2 = fromString(array);
 10         System.out.println(str2);
 11         String str3 = "abc";
 12         String str4 = "abc";
 13         String str5 = str3 + str4;
 14         System.out.println(str5);
 15     }
 16     public static String fromString(int[] array){
 17         String str = "[";
 18         for (int i = 0; i <array.length; i++) {
 19             if(i == array.length - 1){
 20                 str +=  "word" + array[i] + "}";// 字符串相加就是拼接
 21             }else {
 22                 str +=  "word" + array[i] + "#";
 23             }
 24         }
 25         return str;
 26     }
 27 }

练习:键盘录入一个字符,统计字符串中大小写字母及数字字符个数

分析:既然是键盘输入,就有Scanner 其次键盘输入的是字符串 String str = sc.next();

定义四个变量,分别代表四种字符各自的出现次数。最后需要对字符串各个字进行检查,String→char[],然后遍历char【】数组,对当前字符的种类进行判断,并且每个字符进行++动作。

  1 package cn.itcast.demo01.demo01.demo05;
  2 
  3 import java.util.ArrayList;
  4 import java.util.Random;
  5 import java.util.Scanner;
  6 
  7 public class Demo05person {
  8     public static void main(String[] args) {
  9         Scanner sc = new Scanner(System.in);
 10         System.out.println("请输入一串字符串:");
 11         String str = sc.next();
 12         count(str);
 13     }
 14     public static void count(String str){
 15         int a =0 ;
 16         int b =0;
 17         int c =0;
 18         int d =0;
 19         char[] ch = str.toCharArray();
 20         for (int i = 0; i < ch.length; i++) {
 21             char ch1 =  ch[i];
 22             if ('A'<= ch1 && ch1 <= 'Z'){
 23                 a++;
 24             }else if ('a'<= ch1 && ch1 <= 'z'){
 25                 b++;
 26             }else if ('0'<= ch1 && ch1 <= '9'){
 27                 c++;
 28             }else{
 29                 d++;
 30             }
 31         }
 32         System.out.println("大写字母统计个数是:"+ a);
 33         System.out.println("小写字母统计个数是:"+ b);
 34         System.out.println("数字统计个数是:" + c);
 35         System.out.println("其他字符统计个数是:" + d);
 36     }
 37 }
 38 
 39 
 40 

需要注意的是,if括号内最好是单引号,另外字符串对比时,即便是数字也需要加引号。

5.静态方法

         static 关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属 于某个对象的。也就是说,static修饰的既然属于类,就可以不靠创建对象来调用了,类名点调用即可

       新班开班,学员报到。现在想为每一位新来报到的同学编学号(sid),从第一名同学开始,sid为 1,以此类推。学号必须是唯一的,连续的,并且与班级的人数相符,这样以便知道,要分配给下一名新同学的学 号是多少。这样我们就需要一个变量,与单独的每一个学生对象无关,而是与整个班级同学数量有关。

5.1.static关键字如何使用

类变量:使用 static关键字修饰的成员变量

       static 数据类型 变量名;

       不建议使用对象点.类变量,因为后台也会编译为类名称.类变量

类方法:使用 static关键字修饰的成员方法,习惯称为静态方法。

         修饰符 static 返回值类型 方法名 (参数列表){ 方法体}

1587603138(1)

  1 package cn.itcast.demo01.demo01.demo05;
  2 
  3 public class Student {
  4     private int id ;// 学号
  5     private String name;// 姓名
  6     private int age;// 年龄
  7     static String room;// 教室
  8     private static int idCounter = 0; // 学号计数器,每当new一个新对象,计数器++
  9 
 10 
 11     public Student(String name, int age) {
 12         this.name = name;
 13 
 14         this.age = age;
 15         this.id = ++idCounter;// 当传参新建对象的时候,调用idCounter++
 16     }
 17 
 18     public Student() {
 19         idCounter++;
 20 
 21     }
 22 
 23     public int getId() {
 24         return id;
 25     }
 26 
 27     public void setId(int id) {
 28         this.id = id;
 29     }
 30     public String getName() {
 31         return name;
 32     }
 33 
 34     public void setName(String name) {
 35         this.name = name;
 36     }
 37 
 38     public int getAge() {
 39         return age;
 40     }
 41 
 42     public void setAge(int age) {
 43         this.age = age;
 44     }
 45 }
 46 

image

  1 package cn.itcast.demo01.demo01.demo05;
  2 
  3 public class Demo05StaticField {
  4     public static void main(String[] args) {
  5         Student stu = new Student("黄蓉",19);
  6         Student stu2 = new Student("李蓉",29);
  7         stu.room = "1001教室";
  8         Student.room = "222";
  9         System.out.println("学号:" + stu.getId()+ ",姓名:" + stu.getName() + ",年龄:" + stu.getAge() + ",教室:" + stu.room);
 10         System.out.println("学号:" + stu2.getId()+ ",姓名:" + stu2.getName() + ",年龄:" + stu2.getAge() + ",教室:" + stu2.room);
 11     }
 12 
 13 
 14 }
 15 

5.2.注意事项:

1.静态不能直接访问非静态;因为在内存当中是先有静态内容,再有非静态内容

2.静态方法当中不能用this,因为this代表当前对象,通过谁调用的方法,谁就是当前对象。但是静态与对象有关系么?没有关系,因此在静态方法中不能调用this关键字

5.3.静态的内容的内存图:

image

5.4.静态关键字static 还有一个特殊的用法叫 静态代码块

静态代码块的格式:

public class 类名称{

  static{

      静态代码块

}}

特点就是 : 当第一次使用到本类时,静态代码块执行唯一的一次。

                静态内容总是优先于非静态,也就是说静态代码将会比构造方法先执行。

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

image

6.Arrays数组工具类

      java.util包中,java.util.arrays中提供了大量的静态方法,也就是不用new即可使用。用来实现数组常见的操作。


public static String toString(int[] a) :返回指定数组内容的字符串表示形式。

               默认格式:[元素1,元素2,,,,元素n]

public static void sort(int[] a) :对指定的 int 型数组按数字升序进行排序。

               如果是数值,sort默认按照升序从小到大

               如果是字符串包括中文,sort默认按照字母升序;

              如果是自定义类型,自定义的类需要有comparable或comparator接口的支持

  1 package cn.itcast.demo01.demo01.demo05;
  2 
  3 import javax.print.DocFlavor;
  4 import java.util.Arrays;
  5 
  6 public class Demo05StaticField {
  7     public static void main(String[] args) {
  8         int[] intStr = {10, 20,30};
  9         // 调用Arrays中的toString方法
 10         String str1 = Arrays.toString(intStr);
 11         System.out.println(str1);
 12         System.out.println("-----");
 13         int[] array1 = {1,2,3};
 14         // 调用sort方法
 15         Arrays.sort(array1);// 无返回值
 16         System.out.println(Arrays.toString(array1));
 17         String[] str2 = {"bbb" , "ccc","aaa","abc"};
 18         System.out.println("-----");
 19         Arrays.sort(str2);
 20         System.out.println(Arrays.toString(str2));
 21     }
 22 }
 23 

练习题:请使用Arrays相关的api,将一个随机字符串中的所有字符升序排列,并倒叙打印

分析:字符串首先录入 Scanner,要变成数组用toCharArray

        数组使用sort排序

        排序用for

  1 package cn.itcast.demo01.demo01.demo05;
  2 
  3 import javax.print.DocFlavor;
  4 import java.util.Arrays;
  5 import java.util.Scanner;
  6 
  7 public class Demo05StaticField {
  8     public static void main(String[] args) {
  9         Scanner sc = new Scanner(System.in);
 10         System.out.println("请输入一串字符串:");
 11         String str = sc.next();
 12         char[] chars = str.toCharArray();
 13         Arrays.sort(chars);
 14         System.out.println(chars);
 15         for (int i = chars.length - 1; i >= 0; i--) {
 16             System.out.print(chars[i]);
 17         }
 18     }
 19 }

7.Math数学工具类

public static double abs(double a) :返回 double 值的绝对值。

public static double ceil(double a) :返回大于等于参数的小的整,向上取整。

public static double floor(double a) :返回小于等于参数大的整数,向下取整。

public static long round(double a) :浮点数返回接近参数的 long。(相当于四舍五入方法)

练习:请使用 Math 相关的API,计算在 -10.8 到 5.9 之间,绝对值大于 6 或者小于 2.1 的整数有多少


posted @ 2020-04-20 15:53  芒果侠  阅读(244)  评论(0编辑  收藏  举报