Java学习日志Day16_Scanner类的判断和获取功能_String类(重点)

一、Scanner类

  1. Scanner类:java.util.Scanner ;
    需要导包— 文本扫描器
  2. 构造方法:
    public Scanner(InputStream source):
    创建一个文本扫描器,需要传递字节输入流,形式参数是一个抽象类,需要抽象类子类对象
  3. 获取功能
    public int nextInt() :将下一个录入的标记为int类型
  4. 判断功能:
    public boolean hasNextXXX()
    判断是否为xxx类型
    public boolean hasNextLine():判断录入的是否为String
    public boolean hasNextInt() :判断录入的是否为int
举例:
public class ScannerDemo {
    public static void main(String[] args) {

     /*   Scanner sc = new Scanner(System.in) ;
        System.out.println(sc);
        ArrayList arrayList = new ArrayList() ;
        System.out.println(arrayList);*/

     //创建键盘录入对象
       // System类有一个标准输入流,标准输出流
        //in,out这些成员变量
        //public static final InputStream in ;标准输入流
        //public static final PrintStream out ;标准输出流
        InputStream inputStream = System.in ;
        Scanner sc = new Scanner(inputStream) ;

        //提示并录入
        System.out.println("请输入数据:");

        //加入判断
        if(sc.hasNextInt()){
            //   public int nextInt()
            int a = sc.nextInt() ;

            PrintStream ps = System.out ;
            //PrintStream:字节打印流:属于 "字节输出流的一种"
            ps.println("录入的int数据是:"+a);
        }else if(sc.hasNextLine()){
            String a = sc.nextLine() ;
            System.out.println("录入的字符串数据是"+a);
        }else if(sc.hasNextDouble()){

            double d = sc.nextDouble() ;
            System.out.println("录入的double数据是:"+d);
        }

        /**
         * 如果录入的结果数据类型和接收的类型不匹配
         * java.util.InputMismatchException:输入类型不匹配异常
         */

        //System.err.println("这是错误输出流");
    }
}

二、String类(重点)

  1. String代表字符串:Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
    String str = “abc”;
    字符串是常量;它们的值在创建之后不能更改(就是地址值)

  2. 构造方法:
    public String()空参构造(不建议使用:是一个空字符序列)
    String(byte[] bytes) :使用平台默认解码集进行解码
    String(byte[] bytes,字符集) :使用指定字符集集进行解码
    public String(byte[] bytes,int offset,int length):将一个部分字节数组字符串
    public String(char[] value):构造一个字符串对象,传递一个字符数组
    public String(char[] value,int offset,int count):将字符数组的某个位置开始指长度的内容转换成字符串对象
    public String(String original):传入指定的字符串值,构造一个字符串对象!
    String类

  3. 字符串的获取功能:
    int length() :字符串的特有功能:获取字符串的长度

    int[] arr = new int[4] ;
    length属性---数组中获取数组的长度的length属性!
    
  4. 字符串的有转换功能
    编码的过程:
    byte[] getBytes() :将字符串转换为字节数组,空参为平台默认编码集
    byte[] getBytes(字符集) :将字符串转换为字节数组,使用指定字符集编码
    String s = “” ;
    String s = null ; 空值,没有对象

举例1public class StringDemo {
    public static void main(String[] args) throws UnsupportedEncodingException {
        //测试构造方法
//        public String()
        String s1 = new String() ;  //String s1 = "" ;
        //String s2 = null ;
        System.out.println(s1);
        System.out.println(s1.length());
        System.out.println("-----------------------------");


        //编码:将看懂的东西---->变成看不懂的
        /**
         * 常见的字符集:
         *  GBK :中国的中文编码表 (一个中文对应两个字节)
         *  GB2312:GBK的升级版,可以提供更多的中文字符
         *  utf-8:一个中文对应3个字节
         *  iso-8859-1:拉丁文码表
         *  big-5:大五码:港澳地区:繁写字体
         *  unicode:国际编码表
         *
         */
        String s2 = "我爱你中国" ;
        //String的转换功能:getBytes()---->byte[] :平台默认编码集编码: utf-8 (一个中文三个字节)
        byte[] bytes = s2.getBytes();
//        byte[] bytes = s2.getBytes("GBK"); //一个中文两个字节
        //System.out.println(bytes);
        //java.util.Arrays:针对数组操作的工具类(提供:排序,,搜索,将数组转换成的功能)
        //public static String toString(byte[] a):重载的方法:可以将任何数组转换成String
        String byteArray = Arrays.toString(bytes);
        System.out.println(byteArray);

        System.out.println("------------------------");
        //解码:利用String类型的构造方法String(byte[] bytes):默认平台解码集解码
        String s3 = new String(bytes) ;//utf-8解码
//        String s3 = new String(bytes,"GBK") ;
        System.out.println(s3);

        System.out.println("-----------------------------------");

        //创建一个字节数组:
        byte[] bytes2= {97,98,99,100,101} ;
        String s4 = new String(bytes2) ;   //字节数需要找对应的ASCII码表
        System.out.println(s4);
        System.out.println(s4.length());
        // public String(byte[] bytes,int offset,int length):将一个部分字节数组字符串
        String s5  = new String(bytes2,2,2) ;
        System.out.println(s5);
        System.out.println(s5.length());
        System.out.println("-----------------------------------");

        //public String(char[] value):构造一个字符串对象,传递一个字符数组
        char[] chs = {'高','圆','圆'} ;
        String s6 = new String(chs) ;
        System.out.println(s6);
        System.out.println(s6.length());
        //public String(char[] value,int offset,int count)
        String s7 = new String(chs,0,2) ;
        System.out.println(s7+"---"+s7.length());
        System.out.println("-----------------------------------");
//        public String(String original):
        String s8  = new String("hello") ;
        System.out.println(s8+"---"+s8.length());
    }
}

面试题

举例2package com.qf.string_01;

//面试题
//String s = new String("hello") ;
//String s = "hello" ;    //推荐
//两个区别是什么?  分别创建了几个对象

/**
 * 前者:要在堆内存中产生空间地址,并且要常量标记:"hello" , 两个 (堆,常量池)
 * 后者:创建一个对象,将常量赋值给变量,直接现在常量池 中找是否存在这个常量值,存在,直接返回值地址;不存在
 * 在常量池中开辟空间!
 *
 * 前者和共同点:都是创建一个字符串对象:"hello",推荐使用后者,节省内存空间!
 *
 */
public class StringDemo2 {

    public static void main(String[] args) {

        String s1 = "hello" ;
        String s2 = new String("hello") ;
        System.out.println(s1 == s2); //比较地址值

        System.out.println(s1.equals(s2));
        //String底层重写了Object类的equals方法以及hashCode(),比较的是两字符串对象中存储的字符序列是否一样
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

igfff

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值