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:统计大串中小串出现的次数
=============================================================================

我的GitHub地址: https://github.com/heizemingjun
我的博客园地址: http://www.cnblogs.com/chenmingjun
我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun
Copyright ©2018 黑泽明军
【转载文章务必保留出处和署名,谢谢!】
相关文章
|
3月前
|
自然语言处理 Java Apache
在Java中将String字符串转换为算术表达式并计算
具体的实现逻辑需要填写在 `Tokenizer`和 `ExpressionParser`类中,这里只提供了大概的框架。在实际实现时 `Tokenizer`应该提供分词逻辑,把输入的字符串转换成Token序列。而 `ExpressionParser`应当通过递归下降的方式依次解析
221 14
|
4月前
|
存储 编译器 C语言
关于string的‘\0‘与string,vector构造特点,反迭代器与迭代器类等的讨论
你真的了解string的'\0'么?你知道创建一个string a("abcddddddddddddddddddddddddd", 16);这样的string对象要创建多少个对象么?你知道string与vector进行扩容时进行了怎么的操作么?你知道怎么求Vector 最大 最小值 索引 位置么?
81 0
|
7月前
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
148 11
|
7月前
|
存储 JavaScript Java
课时44:String类对象两种实例化方式比较
本次课程的主要讨论了两种处理模式在Java程序中的应用,直接赋值和构造方法实例化。此外,还讨论了字符串池的概念,指出在Java程序的底层,DOM提供了专门的字符串池,用于存储和查找字符串。 1.直接赋值的对象化模式 2.字符串池的概念 3.构造方法实例化
|
7月前
|
Java
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、"+"操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
158 9
|
10月前
|
存储 JavaScript Java
Java 中的 String Pool 简介
本文介绍了 Java 中 String 对象及其存储机制 String Pool 的基本概念,包括字符串引用、构造方法中的内存分配、字符串文字与对象的区别、手工引用、垃圾清理、性能优化,以及 Java 9 中的压缩字符串特性。文章详细解析了 String 对象的初始化、内存使用及优化方法,帮助开发者更好地理解和使用 Java 中的字符串。
162 2
Java 中的 String Pool 简介
|
10月前
|
存储 Java
Java 11 的String是如何优化存储的?
本文介绍了Java中字符串存储优化的原理和实现。通过判断字符串是否全为拉丁字符,使用`byte`代替`char`存储,以节省空间。具体实现涉及`compress`和`toBytes`方法,前者用于尝试压缩字符串,后者则按常规方式存储。代码示例展示了如何根据配置决定使用哪种存储方式。
187 1
|
10月前
|
缓存 安全 Java
java 为什么 String 在 java 中是不可变的?
本文探讨了Java中String为何设计为不可变类型,从字符串池的高效利用、哈希码缓存、支持其他对象的安全使用、增强安全性以及线程安全等方面阐述了不可变性的优势。文中还通过具体代码示例解释了这些优点的实际应用。
205 1
java 为什么 String 在 java 中是不可变的?
|
11月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
303 2