java基础学习_常用类02_Scanner类和String类_day12总结

=============================================================================
=============================================================================
涉及到的知识点有:
  1:Scanner类的概述和使用(了解)
    (1)Scanner类的概述
    (2)Scanner类的构造方法
    (3)Scanner类的成员方法
  2:String类的概述和使用(掌握)
    (1)String类的概述
    (2)String类的构造方法
    (3)字符串的特点
    (4)字符串的面试题(看程序写结果)
    (5)字符串的功能
    (6)字符串的案例
=============================================================================
=============================================================================
1:Scanner类的概述和使用(了解)
  (1)Scanner类的概述
    在JDK5以后出现的用于键盘录入数据的类。
    是一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。
---------------------------------------
  (2)Scanner类的构造方法
    A:讲解了System.in这个东西。
      它其实是标准的输入流,对应于键盘录入
    B:构造方法
      InputStream is = System.in;

      public Scanner(InputStream is)
    C:常用的格式
      Scanner sc = new Scanner(System.in);
---------------------------------------
  (3)Scanner类的成员方法
    1.基本方法的格式:
      A:public boolean hasNextXxx() 即判断下一个输入项是否是某种类型的。
        其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,则可以省略Xxx。
      B:public Xxx nextXxx() 获取某种类型的元素,即返回某种类型的元素。
        Xxx的含义和上个方法中的Xxx相同。
---------------------------------------
    2.要掌握的两个常用方法:
      A:public int nextInt() 获取一个int类型的值
      B:public String nextLine() 获取一个String类型的值
---------------------------------------
    3.需要注意的小问题:
      对于同一个扫描器对象,若先获取一个数值,再获取一个字符串,会出现问题。
      即:先nextInt()然后nextLine()的问题。
      主要原因:就是那个换行符号的问题。
      如何解决呢?
        A:先用键盘录入对象获取一个数值后,再创建一个新的键盘录入对象用来获取字符串。
        B:把所有的数据都先按照字符串获取,然后要什么,你就对应的转换成什么。
-----------------------------------------------------------------------------
2:String类的概述和使用(掌握)
  (1)String类的概述
    字符串是由多个字符组成的一串数据(字符序列)。
    字符串可以看成是字符数组,即它可以和字符数组进行相互转换。

    在实际开发中,字符串的操作是最常见的操作,没有之一。
    而Java没有内置的字符串类型,所以,就在Java类库中提供了一个类String 供我们来使用。
---------------------------------------
  (2)String类的构造方法
    A:public String()   无参构造,即创建一个空内容的字符串对象。

    B:public String(byte[] bytes)    把字节数组转成字符串,即使用一个字节数组构建一个字符串对象。

    C:public String(char[] value)   把字符数组转成字符串,即使用一个字符数组构建一个字符串对象。

    D:public String(byte[] bytes, int offset, int length)   把字节数组的一部分转成字符串,即使用一个字节数组构建一个字符串对象,指定开始的索引值,与使用的字节个数。

    E:public String(char[] value, int offset, int count)   把字符数组的一部分转成字符串,即使用一个字符数组构建一个字符串对象,指定开始的索引值,与使用的字符个数。

    F:public String(String original)   把字符串常量值转成一个字符串对象。
      String s = new String("hello"); 这种构造方法会创建两个或一个对象。

    G:String s = "hello";   虽然不是构造方法,但是结果也是一个字符串对象。这种直接赋值的方法会创建一个或零个对象。
      String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
---------------------------------------
  (3)字符串的特点
    A:字符串是常量,字符串的内容一旦被赋值,就不能被改变。
      注意:这里指的是字符串的内容不能改变,而不是引用不能改变,引用可以改变。
        即:字符串的内容会在字符串常量池里。每一个字符串的内容会有一个地址值。
    B:字面值作为字符串对象和通过构造方法创建对象的不同?
      String s1 = new String("hello");
      String s2 = "hello";
      System.out.println(s1 == s2); // false
      System.out.println(s1.equals(s2)); // true

    ==(等号的比较的是):
      基本类型:比较的就是值是否相同。
      引用类型:比较的就是地址值是否相同。
    equals(该方法比较的是):
      只能是引用类型:默认情况下,比较的是地址值。
      不过,我们可以根据情况自己重写该方法。一般重写都是自动生成,比较的是对象的成员变量值是否相同。
    equals:
      比较引用类型默认也是比较地址值是否相同,而String类重写了equals()方法,比较的是内容是否相同。
内存如下图所示01/02:


---------------------------------------
  (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:字符串的拼接
      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"); // true 字符串为常量时
      System.out.println(s3.equals("hello" + "world")); // true

      注意:
        字符串如果是变量相加,先开空间,再拼接。
        字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否则,就创建。
---------------------------------------
  (5)字符串的功能
    A:String类的判断功能
      public boolean equals(Object obj)        比较字符串的内容是否相同,区分大小写
      public boolean equalsIgnoreCase(String str)    比较字符串的内容是否相同,忽略大小写

      public boolean contains(String str)          判断大字符串中是否包含小字符串

      public boolean startsWith(String str)       判断字符串是否以某个指定的字符串开头
      public boolean endsWith(String str)        判断字符串是否以某个指定的字符串结尾

      public boolean isEmpty()               判断字符串是否为空
        注意:
          String s = "";    //字符串内容为空。
          String s = null;   //字符串对象为空。对象都不存在,所以不能调用方法,如果去调用方法,会出现空指针异常。
---------------------------------------
    B:String类的获取功能
      public int length()    获取字符串的长度(字符个数)。

      public char charAt(int index)    获取指定索引位置的字符。
      public int indexOf(int ch)          返回指定字符在此字符串中第一次出现处的索引。
        注意:形参为什么这里是int类型,而不是char类型?
        原因是:'a'和97其实都可以代表'a'。形参为int类型时写'a'和97都可以,而为char类型时则只能写'a'了。

      public int indexOf(String str)            返回指定字符串在此字符串中第一次出现处的索引。
      public int indexOf(int ch, int fromIndex)      返回指定字符在此字符串中从指定位置后第一次出现处的索引。
      public int indexOf(String str, int fromIndex)     返回指定字符串在此字符串中从指定位置后第一次出现处的索引。

      public String substring(int start)       从指定位置开始截取字符串,默认到末尾(包含start这个索引)。
      public String substring(int start, int end)    从指定位置开始到指定位置结束截取字符串(包括start索引但是不包end索引)。
---------------------------------------
    C:String类的转换功能
      public byte[] getBytes()      把字符串转换为字节数组。
      public char[] toCharArray()     把字符串转换为字符数组。

      public static String valueOf(char[] chs)    把字符数组转成字符串。(方法重载)
      public static String valueOf(int i)              把int类型的数据转成字符串。(方法重载)
        注意:String类的valueOf方法可以把任意类型的数据转成字符串。

      public String toLowerCase()    把字符串转成小写。(注意:原串不变,生成的新串变为小写的)
      public String toUpperCase()    把字符串转成大写。(注意:原串不变,生成的新串变为小写的)

      public String concat(String str)     把字符串进行拼接。
---------------------------------------
    D:String类的其他功能
      a:替换功能
        public String replace(char old, char new)
        public String replace(String old, String new)
      b:去除字符串两端空格功能
        public String trim()
      c:按字典顺序比较两个字符串功能
        public int compareTo(String str)
        public int compareToIgnoreCase(String str)

        示例:
          String s1 = "hello";
          String s2 = "hello";
          String s3 = "abc";
          String s4 = "xyz";
          System.out.println(s1.compareTo(s2)); // 0
          System.out.println(s1.compareTo(s3)); // 7
          System.out.println(s1.compareTo(s4)); // -16
            比较不一样的时候,就用前一个串的第一个字符的ASCII减去后一个串的第一个字符的ASCII,得到一个int值返回。
            若第一个字符相同,则比较第二个字符,以此类推。若都相同,则返回int值0。

          若如下这样,查看该方法源码可知,返回的是第一个串比第二个串多的字符个数。
          String s5 = "hello";
          String s6 = "hel";
          System.out.println(s5.compareTo(s6)); // -2

---------------------------------------
  (6)字符串的案例
    A:模拟用户登录
    B:字符串的遍历
    C:统计字符串中大写、小写及数字字符的个数
    D:把字符串的首字母转成大写,其他转成小写
    E:把int数组拼接成一个指定格式的字符串输出
    F:字符串反转
    G:统计大串中小串出现的次数
=============================================================================

posted @ 2018-02-27 23:19  黑泽君  阅读(271)  评论(0编辑  收藏  举报