zoukankan      html  css  js  c++  java
  • 重踏学习Java路上_Day12(Scanner,String)

    1:Scanner的使用(了解)
        (1)在JDK5以后出现的用于键盘录入数据的类。
        (2)构造方法:
            A:讲解了System.in这个东西。
                它其实是标准的输入流,对应于键盘录入,in是System这个类中的最终静态变量:public static final InputStream;  in  “标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。
            B:构造方法
                InputStream is = System.in;
                
                Scanner(InputStream is)
            C:常用的格式
                Scanner sc = new Scanner(System.in);
        (3)基本方法格式:
            A:hasNextXxx() 判断是否是某种类型的
            B:nextXxx()    返回某种类型的元素
        (4)要掌握的两个方法
            A:public int nextInt()
            B:public String nextLine()
        (5)需要注意的小问题
            A:同一个Scanner对象,先获取数值,再获取字符串会出现一个小问题。主要原因:就是那个换行符号的问题。
            B:解决方案:
                a:重新定义一个Scanner对象,Scanner sc2 = new Scanner(System.in);
                b:把所有的数据都用字符串获取,然后再进行相应的转换

                c:sc.nextLine();//用于清空换行回车字符即可清楚缓冲区多余的换行符
    例子,数据类型不匹配:

    public class ScannerDemo {
        public static void main(String[] args) {
            // 创建对象
            Scanner sc = new Scanner(System.in);

            // 获取数据
            if (sc.hasNextInt()) {//增强健壮性,防止报错:InputMismatchException:输入的和你想要的不匹配
                int x = sc.nextInt();
                System.out.println("x:" + x);
            } else {
                System.out.println("你输入的数据有误");
            }
        }
    }      

    例子 ,整数获取完毕,再获取字符串为空,原因:缓冲区还有上一个整数截取完留下的换行符

    public class ScannerDemo {
        public static void main(String[] args) {
            int b = sc.nextInt();//只会读整数类型,其他什么都不会截取,但输入完回车,会留下一个换行符在缓冲区的
            sc.nextLine();//用于清除换行回车字符       
            String s1 = sc.nextLine();
            System.out.println("S1:"+s1+",b:"+b);
            System.out.println("----------------");   
        }
    }

        
    2:String类的概述和使用(掌握)
        (1)多个字符组成的一串数据,也可以看成是一个字符数组其实它可以和字符数组进行相互转换。字符串在底层会自动转化为value,一个字符数组,而且是final,所以不能更改。

          通过查看API,我们可以知道:

                注意:String类重写了equal()方法,比较的是内容是否相同

        A.字符串字面值"abc"也可以看做是一个字符串对象。    

        B.字符串是常量,一旦被赋值,就不能改变。   

      API明确写道:Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。

    API例子:

      String str = "abc";
        等效于:
      char data[] = {'a', 'b', 'c'};
      String str = new String(data);


        (2)构造方法:注意:offset - 要解码的第一个 byte 的索引
            A:public String()   //空构造
            B:public String(byte[] bytes)  //把字节数组转成字符串  字节码数组:arr={65,66,97,98,99,100,68} ,执行该构造方法后,会自动关联各数字下代表UniCode码,转化为字符串:ABabcdD
            C:public String(byte[] bytes,int offset,int length)  //把字节数组的一部分转成字符串   String s3 = new String(bys2,1,3);  从1开始,截取三个字符作为字符串
            D:public String(char[] value)  //把字符数组转成字符串
            E:public String(char[] value,int offset,int count)  //把字符数组的一部分转成字符串
            F:public String(String original) //把字符串常量值转化为字符串
            下面的这一个虽然不是构造方法,但是结果也是一个字符串对象
            G:String s = "hello";
        (3)字符串的特点
            A:字符串一旦被赋值,就不能改变。
                注意:这里指的是字符串的内容不能改变,而不是引用不能改变。
            B:字面值作为字符串对象和通过构造方法创建对象的不同
                String s = new String("hello");和String s = "hello"的区别?

    字符串一旦被赋值,就不能改变图解:

    String s = new String("hello");和String s = "hello"的区别:图解


        (4)字符串的面试题(看程序写结果)
            A:==和equals()
                String s1 = new String("hello");
                String s2 = new String("hello");
                System.out.println(s1 == s2);// false
                System.out.println(s1.equals(s2));// true

                String s3 = new String("hello");
                String s4 = "hello";
                System.out.println(s3 == s4);// false
                System.out.println(s3.equals(s4));// true

                String s5 = "hello";
                String s6 = "hello";
                System.out.println(s5 == s6);// true
                System.out.println(s5.equals(s6));// true
            B:字符串的拼接

    注意:1.字符串如果是变量与变量相加,会先开辟空间,再进行拼接,放到空间处

            2.字符串如果是常量与常量相加,会先进行相加,然后在常量池中找,如果有会直接返回常量值地址,没有的话会在常量池开辟新空间存放,然后返回引用值
                String s1 = "hello";
                String s2 = "world";
                String s3 = "helloworld";
                System.out.println(s3 == s1 + s2);// false  这个理解很重要
                System.out.println(s3.equals((s1 + s2)));// true
                System.out.println(s3 == "hello" + "world");// false 这个我们错了,应该是true   这个理解很重要
                System.out.println(s3.equals("hello" + "world"));// true
      

     (5)字符串的功能

    特别注意:  字符串内容为空 和 字符串对象为空,还有一点就是,要想调用方法,一定要先创造对象,没有对象怎么调用方法,不然就会报错:空指针异常NullPointerException

    字符串内容为空:是指对象存在,但没有数据   例:String s = "";

    字符串对象为空:是指对象都不存在   例:String s = null;
            A:判断功能
                boolean equals(Object obj)   //比较字符串的内容是否相同,区分大小写
                boolean equalsIgnoreCase(String str)  //比较字符串的内容是否相同,忽略大小写
                boolean contains(String str)  //判断大的字符串是否包含晓得字符串
                boolean startsWith(String str)  //判断字符串是否以某个指定的字符串开头
                boolean endsWith(String str)  //判断字符串是否以某个指定的字符串结尾
                boolean isEmpty()  //判断字符串是否为空,只能是存在实例对象的变量能调用 "".isEmpty(),输出true
            B:获取功能
                int length()    //获取字符串的长度
                char charAt(int index)  //获取指定索引位置的字符
                int indexOf(int ch)  //返回指定字符在此字符串中第一次出现处的索引

                           为什么这里是int类型的ch,而不是char类型的ch?

                           原因是:'a'和97其实都可以代表'a',而如果变为char就会出现输入整数就会报错,因为需要强制转换,而int会自动识别'a'为97。

           int indexOf(String str)   //返回指定字符串在此字符串中第一次出现处的索引,记住,找不到不会报错,会返回-1
                int indexOf(int ch,int fromIndex)    //返回指定字符在此字符串中从指定位置后第一次出现处的索引 ,记住,找不到不会报错,会返回-1
                int indexOf(String str,int fromIndex)  //返回指定字符串在此字符串中从指定位置后第一次出现处的索引 ,记住,找不到不会报错,会返回-1
                String substring(int start)   //从指定位置开始截取字符串,默认到末尾,指定位置start也是包含的
                String substring(int start,int end)  //从指定位置开始到指定位置结束截取字符串,包含start位置字符,但不包含end位置的字符。
            C:转换功能
                byte[] getBytes()   //把字符串转换为字节数组
                char[] toCharArray()  //把字符串转换为字符数组
                static String valueOf(char[] chs)  //把字符数组转换为字符串
                static String valueOf(int i) //把int类型的数据转换成字符串
                String toLowerCase()  //把字符串转换成小写 ,返回的新串会全部小写,但原来的字符串是不会改变的
                String toUpperCase()  //把字符串转换成大写,返回的新串会全部大写,但原来的字符串是不会改变的
                String concat(String str)  //把字符串拼接
            D:其他功能
                a:替换功能
                    String replace(char old,char new)
                    String replace(String old,String new)
                b:去空格功能,只能去除字符串头部跟尾部的空格,中间的空格是不会删除的
                    String trim()
                c:按字典比较功能,比较的是第一个字母,若两边第一个字母不同,用第一个的ASCII值减去第二个的ASCII值,然后然会相减后的值,若第一个字符两边一样就接着比下一个字符,只要不限差不为0就返回,若读取完还是为0就返回,说明两个的字符串序列是一样的。让内容相同,长度不一样,即"hel".compareTo("hello"),这样的情况,源码写了,会返回两个长度之差,所以会等于-2.
                    int compareTo(String str)
                    int compareToIgnoreCase(String str)
        (6)字符串的案例
            A:模拟用户登录
            B:字符串遍历
            C:统计字符串中大写,小写及数字字符的个数
            D:把字符串的首字母转成大写,其他小写
            E:把int数组拼接成一个指定格式的字符串
            F:字符串反转
            G:统计大串中小串出现的次数

  • 相关阅读:
    Hibernate的乐观锁与悲观锁 及应用
    用二进制进行权限管理(按位与 按位或 按位异或 运算 )
    最土团购开启Rewrite伪静态(地址重写|城市切换等)的方法以及规则文件 附:.htaccess
    Linux下获取详细硬件信息的工具:Dmidecode命令详解
    问题:cas单点注销后,再次登录不能返回原单点注销的系统问题。
    迎接十八大 google的搜索、邮箱等服务解决办法
    证书管理器工具 (Certmgr.exe)
    最土团购集成google map,marker跟随鼠标移动
    免费的网站速度测试平台
    java 正则表达式库
  • 原文地址:https://www.cnblogs.com/canceler/p/4607275.html
Copyright © 2011-2022 走看看