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 黑泽明军
【转载文章务必保留出处和署名,谢谢!】
相关文章
|
27天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
44 8
|
27天前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
60 1
|
1月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
116 4
|
1月前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
1月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
60 2
|
1月前
|
Java Android开发
Eclipse 创建 Java 类
Eclipse 创建 Java 类
26 0
|
4月前
|
安全 Java
【Java基础面试二十七】、说一说StringBuffer和StringBuilder有什么区别
这篇文章介绍了Java中StringBuffer和StringBuilder的区别:StringBuffer是线程安全的,而StringBuilder是非线程安全的,因此在单线程环境下优先推荐使用StringBuilder以获得更好的性能。
|
4月前
|
安全 Java API
Java系类 之 String、StringBuffer和StringBuilder类的区别
这篇文章讨论了Java中`String`、`StringBuffer`和`StringBuilder`三个类的区别,其中`String`是不可变的,而`StringBuffer`是线程安全的可变字符串类,`StringBuilder`是非线程安全的可变字符串类,通常在单线程环境下性能更优。
Java系类 之 String、StringBuffer和StringBuilder类的区别
|
4月前
|
API C# 开发者
WPF图形绘制大师指南:GDI+与Direct2D完美融合,带你玩转高性能图形处理秘籍!
【8月更文挑战第31天】GDI+与Direct2D的结合为WPF图形绘制提供了强大的工具集。通过合理地使用这两种技术,开发者可以创造出性能优异且视觉效果丰富的WPF应用程序。在实际应用中,开发者应根据项目需求和技术背景,权衡利弊,选择最合适的技术方案。
204 0
下一篇
DataWorks