zoukankan      html  css  js  c++  java
  • 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 的整数有多少


  • 相关阅读:
    深度解析VC中的消息传递机制(上)
    DLL的远程注入技术
    一些游戏编程的书[转]
    [转]小小C的C++之歌
    Windows Server 2008无法使用arp命令添加静态MAC绑定
    如何调用未公开的API函数[转]
    IOCP中的socket错误和资源释放处理方法
    TinyXML应用例子
    微软C/C++ 编译器选项参考
    [摘录]这几本游戏编程书籍你看过吗?
  • 原文地址:https://www.cnblogs.com/rango0550/p/12738298.html
Copyright © 2011-2022 走看看