JAVA零学习之基础归纳(七)--API、Random、String类

Java基础–API、Random、String类

从零开始学习java,一天进步一点点,一天学习一点点,多掌握知识和多多做题,本篇主要写API、Random、String类的基础内容

1、API概述

  • 什么是API
    • API (Application Programming Interface) :应用程序编程接口
  • java中的API
    • 指的就是JDK中提供的Java类,这些类将底层的实现封装了起来,而我们只需学会使用即可
1.2 API文档

打开帮助文档,一般情况下点击索引,输入关键字即可

2、 Random随机数类

2.1 Random
  • 此类的对象用于生产伪随机数
  • 可在API文件里,查询Random的使用和详情
2.2 构造方法
  • Random() 创建一个新的随机数生成器,默认使用当前的时间(毫秒值)作为种子
  • Random(long seed) 使用单个long 种子创建一个新的随机数生成器
  • 如果两个随机数的对象使用相同的种子,那么这两个随机数对象调用相同的方法时,那么生成的随机数也一致
2.3 使用
  • 获取一个随机的int数字(范围是int所有范围,有正有负):int num = random.nextInt();
  • 获取一个随机的int数字(参数代表了范围,左闭右开区间):int num = random.nextInt(3);
  • 实际上代表的含义是:(左闭右开----->)[0,3),也就是0~2的范围
import java.util.Random;

public class RanS {
    public static void main(String[] args) {
        Random random = new Random();
        
        //创建对象         
        Random rd1=new Random();
        System.out.println(rd1.nextInt());
        System.out.println(rd1.nextInt(10));
        System.out.println(rd1.nextDouble());
        System.out.println(rd1.nextBoolean()); 
 
        //指定种子参数,创建 Random 对象
        Random rd2=new Random(565789L);
        System.out.println(rd2.nextInt());
        Random rd3=new Random(565789L);
        System.out.println(rd3.nextInt(10)); 

        int num = random.nextInt();
        System.out.println("无参的int随机数:"+num);
        int num1 = random.nextInt(3);
        System.out.println("有参且到3的int随机数(实际范围是0~2):"+num1);
  }
}
2.4 练习
2.4.1 练习一:根据int变量n的值,来获取随机数字,范围是[1,n],可以取到1也可以取到n。但不要0
import java.util.Random;


 // 题目要求:
 //根据int变量n的值,来获取随机数字,范围是[1,n],可以取到1也可以取到n。但不要0

 // 思路:
 //1、定义一个int变量,随意赋值
 // 2、使用Random
 // 3、假设写一个数字“x”,范围为[0~x)(也就是[0~x-1]),但是想要的是:1~x,所以两边共同加一即可

public class Practice {
    public static void main(String[] args) {
        int n = 10;
        Random random = new Random();

        //因为“n=10”但结果不取‘0’,但取‘n’,所以在对象后+1即可
        int in1 = random.nextInt(n)+1;  // 本来范围为[0~n),整体加一后成了:[1~n+1)  也就是[1,n]
        System.out.println(in1);

        //如果将 “+1” 放在里面
        int in2 = random.nextInt(n+1);  // 此时,括号里为: n+1  而n为10,所以  int in1 = random.nextInt(11);  范围[0~11)
        System.out.println(in2);
     }
}
注:+1写在括号外面意思是:我先在[0~n)中拿一个随机数,在+1就是在[1~n]中的了
2.4.2 猜数字
import java.util.Random;
import java.util.Scanner;


 // 猜数字
 //游戏开始,随机生成一个 1-100 之间的整数,玩家猜测一个数字,与随机生成的对比,系统 提示大或者小,直到玩家猜中,游戏结束
 // 思路:
 // 1、产生一个随机数字,并不再变化  Random
 // 2、用户输入  Scanner
 // 3、将随机数与输入数进行比较判断  if
 // 4、如果猜错,提示太大或者太小,并且重试
 // 5、重试就是在进行一次循环、一次判断,所以次数不固定,则需要死循环
 // 6、死循环: while(true)  或者  for(;;){}

public class Practice02 {
    public static void main(String[] args) {
        Random random =new Random();
        int in1 = random.nextInt(100)+1;
//        System.out.println(in1);
        Scanner sc = new Scanner(System.in);

        while (true){
            System.out.println("请输入你猜的数字:");
            int insc = sc.nextInt();
            if (insc>in1) {
                System.out.println("输入过大");
            }else if(insc<in1){
                System.out.println("输入过小");
            }else{
                System.out.println("输入正确");
                break;  //跳出死循环
            }

        }
    }
}
2.4.3 随机生成字母
  • 随机生成五个不重复的小写字母,并按照字母顺序排列输出

    • package com.bdit.test;
      
      import java.util.Arrays;
      import java.util.Random;
      
      //随机生成5个不重复的小写字母,并按照字母顺序排列输出。
      //97-122
      public class Test03 {
          public static void main(String[] args) {
              int[] a= new int[5];
              Random random = new Random();
      
      
      //使随机产生的数,输入到数组里面
              for (int i = 0; i < a.length; i++) {
                  a[i] = random.nextInt(25)+97;
          //判断,随机产生的数
                  for (int j = 0; j < i; j++) {
                      if(a[i]==a[j]){
                          i--;
      
                          break;
                      }
                  }
      
              }
      
      //排序
              Arrays.sort(a);
              for (int i = 0; i < a.length; i++) {
                  System.out.println("==="+a[i]);
                 char crr = (char)a[i];
                 // System.out.print(crr+" ");
              }
              System.out.println();
              System.out.println("英文第一个数"+a[0]);
              System.out.println("英文第二个数"+a[1]);
              System.out.println("英文第三个数"+a[2]);
              System.out.println("英文第四个数"+a[3]);
              System.out.println("英文第五个数"+a[4]);
      
      
      
          }
      }
      

3、 包装类

  • 为了丰富基本数据类型之间的各种操作,以及更加符合面向对象编程的思想,java 为基本数 据类型提供了所对应的类,这个类称为包装类。
基本数据类型包装类
byteByte
shortShort
charCharacter
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean

位于 java.lang 包下的所有类、无需导包,可以直接使用

  • 装箱:就是把基本数据类型可以直接赋值给所对应的包装类对象

  • 拆箱:可以把一个包装类对象之间赋值给所对应的基本数据类型

  • 装箱和拆箱都是自动完成的

    • package com.bdit.test;
      
      public class Test04 {
          public static void main(String[] args) {
      
      //int
      
      //        Integer()有int和String类型的;String类型的必须都是数字
              Integer integer = new Integer(2);
              Integer integer1 = new Integer("123456");
              System.out.println(integer);
              System.out.println(integer1);
      
      //        Integer()以过时,可以用但是后续可能会删除,所以一般用其替代类
      //               Integer.valueOf();也是有int和String类型的;String类型的必须都是数字
              Integer integer001 = Integer.valueOf(3);
              Integer integer002 = Integer.valueOf("123123");
              System.out.println(integer001);
              System.out.println(integer002);
      
              Integer integer003 = Integer.parseInt("123456");
      
              System.out.println(integer003);
      
      
      //boolean
              Boolean boolean001 = Boolean.valueOf("s");
              Boolean boolean002 = Boolean.valueOf(true);
              System.out.println(boolean001);
              System.out.println(boolean002);
      
              Boolean boolean003 = Boolean.parseBoolean("true");
              Boolean boolean004 = Boolean.parseBoolean("yes");
              System.out.println(boolean003);
              System.out.println(boolean004);
      
      
      
      //char
      
              System.out.println(Character.valueOf('4'));//与  【 Character character = Character.valueOf('4');  sout  】一致
              System.out.println("是否为数字"+Character.isDigit('x'));//isDigit(char ch) 确定指定的字符是否是数字。
              System.out.println("是否为数字"+Character.isDigit('4'));//isDigit(char ch) 确定指定的字符是否是数字。
              System.out.println("确定指定的字符是字母还是数字"+Character.isLetterOrDigit('*'));//isLetterOrDigit(char ch) 确定指定的字符是字母还是数字。
              System.out.println("确定指定的字符是否是一个字母"+Character.isLetter('e'));//isLetter(char ch) 确定指定的字符是否是一个字母。
      
      
      
      
      //装箱
              Long long01 = Long.valueOf(5);
              long lo1=long01;
              System.out.println(lo1);
      //拆箱
              long lo2 = 23L;
              Long long02 = lo2;
              System.out.println(long02);
          }
      }
      

4、 String类

4.1 概述
  • java.lang.String 类代表字符串。 Java 程序中所有的字符串文字都可以被看作是实现此类的实 例(对象),也就是说凡是用双引号引起来的内容,都是一个字符串 String 类的对象。
  • 特点
  • 1、字符串是一个不可变的类,也就是字符串的值在创建后不能修改。
  • 此处说的不可变指的是值本身不能更改,但是重新给字符串对象赋值,会改变字符串对象指向的内存地址。
  • 字符串池的原理来实现以上的过程:字符串池是一个专门用来存储字符串 值得空间,所有创建的字符串对象在赋值时,都需要和字符串池中已有的 内容进行对比,如果内容已经存在,直接引用已存在的值得内存地址;如果不存在,才会把新的内容放到字符串池中。
4.1.1 String 的构造方法
  • 三种构造方法:

    • public String();  创建一个空白字符串,不含有任何内容
      
    • public String(char[] array);   根据字符数组的内容,来创建对应的字符串
      
    • public String(byte[] array);   根据字节数组的内容,来创建对应的字符串
      
  • 直接创建

    • String  str  =  "Hello";  右边双引号
      
  • 注意: 直接写上双引号,就是字符串对象。

  • 默认创建一个字符串对象时,可以直接把内容使用双引号引起来即可。

    • 例如: String name=”张三”;
  • 可以使用 String 的构造方法来创建对象。

    • 例如: String name=new String(“李四”);但是,该方式会创建两个对象,原始对象是构造方法中的字符串参数,name 其实就是一个对象副本

      String str1 = new String();
      	System.out.println(str1);
      	char[]chars={'a','b','c','d'};
         String str2=new String(chars);
         System.out.println(str2);
         byte[]bytes={48,49,50,51};
         String str3=new String(bytes);
         System.out.println(str3);
      
4.1.2 字符串常量池
  • 字符串常量池:程序中直接写上双引号字符串,就在池中(只有直接写双引号,才在池中)。
    • 对于基本类型来说: == 是进行数值的比较
    • 对于引用类型来说: == 是进行【地址值】的比较
public static void main(String[] args) {
    String str1 = "abc";
    String str2 = "abc";

    char[] ch = {'a','b','c'};
    String str3 = new String(ch);

    System.out.println(str1 == str2);
    System.out.println(str1 == str3);
    System.out.println(str2 == str3);
}

Lingduyu

4.2 字符串特点
  1. 程序中所有的双引号字符串都是String类的对象,就算没有new也照样是
  2. 字符串的内容永不可变
  3. 字符串不可改变但是字符串可以共享使用(节约内存,前提字符串不可改变)
  4. 字符串效果上相当于是 char[]字符数组,但底层字节是byte[]字节数组
4.3 String类中比较方法
  • ==:比较的是两个字符串对象指向的内存地址是否一样
  • public boolean equals(Object str ):判断两个字符串的内容是否一样
  • 【compareTo()方法比较两个字符串,首先比较两个字符串的首字母是否一致,如果不一致 就直接使用它们的 ASCII 码值相减作为最终的结果;如果相同,则比较第二个字符,以此类 推。如果有一方已经比较完毕,这种情况下,直接把两个字符串的长度相减作为最终的结果;
package com.bdit.test;

public class Test06 {
    public static void main(String[] args) {
//       ==:比较的是两个字符串对象指向的内存地址是否一样
//        public boolean equals(Object str ):判断两个字符串的内容是否一样

        System.out.println("aa".equals("aa"));
        System.out.println("aa".equals("AA"));

//      比较两个字符串是否相同,忽略大小写
        System.out.println("aa".equalsIgnoreCase("AA"));

//        按字典顺序比较,字符串相等返回0、字符串在参数值之前,返回值小于0,之后大于0
//        【compareTo()方法比较两个字符串,首先比较两个字符串的首字母是否一致,如果不一致 就直接使用它们的 ASCII 码值相减作为最终的结果;如果相同,则比较第二个字符,以此类 推。如果有一方已经比较完毕,这种情况下,直接把两个字符串的长度相减作为最终的结果
        System.out.println("aa".compareTo("aa"));
        System.out.println("aa".compareTo("ab"));
        System.out.println("aa".compareTo("abc"));
        System.out.println("ac".compareTo("ab"));
//        按字典顺序比较,忽略大小写
        System.out.println("aa".compareToIgnoreCase("AA"));
//        检查一个字符串是否以参数字符串开始
        System.out.println("zhangsan".startsWith("a"));
//        检查一个字符串是否以参数个字符串结束
        System.out.println("zhangsan".endsWith("n"));


//       indexOf(int ch) 返回指定字符第一次出现的字符串内的索引。
//        indexOf(int ch, int fromIndex) 返回指定字符第一次出现的字符串内的索引,以指定的索引开始搜索。
//        indexOf(String str) 返回指定子字符串第一次出现的字符串内的索引。
//        indexOf(String str, int fromIndex) 返回指定子串的第一次出现的字符串中的索引,从指定的索引开始。


        System.out.println("zhangsan".indexOf("n"));
        System.out.println("zhangsan".indexOf("m"));
        System.out.println("zhangsan".indexOf("a",4));//6
        System.out.println("zhangsan".indexOf("an"));//2
        System.out.println("zhangsan".indexOf("an",4));//6

//       charAt(int index) 返回指定索引处的 char值。
        System.out.println("zhangsan".charAt(5));



//       substring(int beginIndex) 返回一个字符串,是除此位置的剩余所有字符从1开始。
//        substring(int beginIndex, int endIndex) 提取从beginIndex开始到endIndex(不包括此位置)之间的字符串

        System.out.println("zhangsan".substring(1));
        System.out.println("zhangsan".substring(2,5));


//        concat(String str) 将指定的字符串连接到该字符串的末尾。
        System.out.println("zhangsan".concat("lisi"));

//        replace(char oldChar, char newChar) 返回从替换所有出现的导致一个字符串 oldChar ,在这个字符串 newChar 。
        System.out.println("zhangsan".replace("zhangsan","lisilii"));

//        trim()忽略前后空白
        System.out.println("         前后空白           后".trim());

//        toUpperCase()所有字符都转为大写
        System.out.println("zhangsan".toUpperCase());

//        toLowerCase()都转为小写
        System.out.println("TIMI".toLowerCase());

//        将此字符串转换为新的字符数组
        char[] ch1 = "zhangsan".toCharArray();
        for (int i = 0; i < ch1.length; i++) {
            System.out.print(ch1[i]+" ");
        }
        System.out.println();

//        将此字符串按照给定的规则进行字符串的拆分
        String  str1 ="String-lei-de-ying-yong";
        String[] str2 =str1.split("-");
        for (int i = 0; i < str2.length; i++) {
            System.out.println(str2[i]);
        }
    }
}


5、 StringBuffer 和 StringBuilder 类

5.1 概述
  • 由于String类的对象的内容是不可改变的,所以在每次字符串操作后,总会在内存中创建一个新的对象,即耗时又浪费内存空间,所以为了解决这一个问题,java中提供了java.lang.StringBuffer 和 java.lang.StringBuilder 类,这两个类又称为可变字符序列,他是一个类似于String的字符串缓冲区,通过某些方法调用可以改变该对象的长度和内容
  • StringBuffer 和 StringBuilder 是个字符串的缓冲区,即它是一个容器,容器中可以装很多字 符串,并且能够对其中的字符串进行各种操作。
  • 它们的内部都拥有一个数组用来存放字符串内容,进行字符串操作时,直接在数组中操作, 它们会自动维护数组的扩容。
5.2 StringBuffer 构造方法
  • public StringBuffer() :构造一个没有字符的字符串缓冲区,初始容量为 16 个字符。
  • public StringBuffer(String str) :构造一个初始化为指定字符串内容的字符串缓冲区
5.3 StringBuilder 构造方法
  • public StringBuilder() :构造一个没有字符的字符串缓冲区,初始容量为16个字符。
  • public StringBuilder(String str) :构造一个初始化为指定字符串内容的字符串缓冲区。
5.4 两者区别

【StringBuffer 和 StringBuilder 两者的操作几乎是一模一样的,只不过 StringBuffer 是线程安 全(同步)的,StringBuilder 是线程不安全(同步)。】 如果不考虑,线程问题,那么 StringBuilder 的效率是最高的,String 永远效率是最低的

5.总结

本篇大部分为应用,不要死记硬背,因为如果死记硬背算记住在应用上也是很生涩的,并没有那种依靠自己理解来记住用的方便,而基础的问题一定要掌握,基础打好等到后面难的也会变简单。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值