zoukankan      html  css  js  c++  java
  • Scanner、String(java基础知识十二)

    1.Scanner的概述和方法介绍

    * A:Scanner的概述
      * 是一个从键盘输入的类,有final修饰,不能被子类继承
      * Scanner sc = new Scanner(System.in);
      * String str = sc.nextLine();
    * B:Scanner的构造方法原理
      * Scanner(InputStream source)
      * System类下有一个静态的字段:
      * public static final InputStream in; 标准的输入流,对应着键盘录入。

    * C:一般方法
      * hasNextXxx() 判断是否还有下一个输入项,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,则可以省略Xxx。
      * nextXxx() 获取下一个输入项。Xxx的含义和上个方法中的Xxx相同,默认情况下,Scanner使用空格,回车等作为分隔符。

    2.Scanner获取数据

    * 两个常用的方法:
      * public int nextInt():获取一个int类型的值
      * public String nextLine():获取一个String类型的值。

    3.String类的概述

    * A:什么是字符串
    * B:String类的概述
      * 通过JDK提供的API,查看String类的说明
      * 1.Java 程序中的所有字符串字面值(如"abc")都作为此类的实例(对象)实现。
      * 2.字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。
      * 3.String 类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。
      * 4.Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过StringBuilder(或 StringBuffer)类及其append 方法实现的。字符串转换是通过toString 方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承。
      * 5.除非另行说明,否则将 null 参数传递给此类中的构造方法或方法将抛出 NullPointerException。

      * 可以看到这样的两句话。
        * a:字符串字面值"abc"也可以看成是一个字符串对象。
          * String s = "myworld";
        * b:字符串是常量,一旦被赋值,就不能被改变。但可以使其变成垃圾。

    4.String类的构造方法

    * A:常见构造方法
      * 1.public String():空参构造,表示一个空字符序列
      * 2.public String(byte[] bytes):把字节数组转成字符串,(也称解码)
      * 3.public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串
      * 4.public String(char[] value):把字符数组转成字符串
      * 5.public String(char[] value,int index,int count):把字符数组的一部分转成字符串
      * 6.public String(String original):把字符串常量值转成字符串
    * B:案例演示
      * 演示String类的常见构造方法
      * "" 与 null 的区别??
        * String s8 = "";
        * String s9 = null;
        * System.out.println(s8);
        * System.out.println(s9);//打印对象的引用如果是null就返回null,如果不是null就
        * 返回对象的toString方法
        //""--是一个String类的对象,可以调用String类中所有方法
        //null--null是一个空值,不能调用任何方法,因为调用就会报空指针异常(NullPointerException)
        * public int length():返回此字符串的长度。

    5.String类的常见面试题

    * 1.判断定义为String类型的s1和s2是否相等
      * String s1 = "abc";//会进常量池创建对象,然后把地址赋给s1。
      * String s2 = "abc";//先看常量池中有没有相同的对象,有的话,把地址赋给s2,没有的话,重新创建对象。
      * System.out.println(s1 == s2);//比较的是对象的地址,相同。
      * System.out.println(s1.equals(s2));//比较的是对象的值。

    * 2.下面这句话在内存中创建了几个对象?
      * String s1 = new String("abc");//创建了俩对象,一个在常量池里,一个堆里(常量池的副本)。

    * 3.判断定义为String类型的s1和s2是否相等
      * String s1 = new String("abc");//创建了俩对象,其中s1指向的是在堆里的那个对象的地址,
      * String s2 = "abc";//s2指向的是在常量池中对象的地址。
      * System.out.println(s1 == s2); ?//比较地址值,一个常量池中,一个堆中,是不相等的。
      * System.out.println(s1.equals(s2)); ?//比较的是对象的值,相等。

    * 4.判断定义为String类型的s1和s2是否相等
      * String s1 = "a" + "b" + "c";//java中自带常量优化机制,右边在编译时,已经是“abc”字符串,所以在常量池中创建对象,然后把地址赋给s1,
      * String s2 = "abc";//先在常量池中查找是否有相同的对象,如果有,则把对象的地址值,赋给s2,如果没有,就在常量池中创建一个对象,然后把其地址值付给s2,
      * System.out.println(s1 == s2); ?//比较地址值,他们都指向常量池中相同的对象,所以相等,结果为true,
      * System.out.println(s1.equals(s2)); ?//比较的是对象中的值,相等,结果为ture。

    * 5.判断定义为String类型的s1和s2是否相等
      * String s1 = "ab";//在常量池中创建对象,然后把其地址赋给s1,
      * String s2 = "abc";//在常量池中创建对象,然后把其地址赋给s2,
      * String s3 = s1 + "c";//当字符串与对象用+连接的时候,底层会调用StringBuffer的append方法,对字符串进行添加,然后将StringBuffer对象转换为String对象,并赋值给s3,s3记录的是堆内存对象的地址值。
      * System.out.println(s2 == s3);? // false
      * System.out.println(s3.equals(s2)); ? //ture

    6.String类的判断功能

      * boolean equals(Object obj):比较字符串的内容是否相同,按字典顺序,区分大小写
      * boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
      * boolean contains(String str):判断大字符串中是否包含小字符串
      * boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
      * boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
      * boolean isEmpty():判断字符串是否为空。

    7.String类的获取功能

      * int length():获取字符串的长度。
      * char charAt(int index):获取指定索引位置的字符
      * int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
      * int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。
      * int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。
      * int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
      * lastIndexOf----同上
      * String substring(int start):从指定位置开始截取字符串,默认到末尾。
      * String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。

    8.统计不同类型字符个数

    需求:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数。
            public static void main(String[] args) {
                //定义计数器
                int big = 0;//大写字母
                int small = 0;
                int math = 0 ;
                int other = 0;
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入一个字符串:");
                String str = sc.nextLine();
                for (int i = 0; i < str.length(); i++) {
                    char temp = str.charAt(i);
                    if(temp >= 'A' && temp <= 'Z'){
                        big++;
                    }else if(temp >= 'a' && temp <= 'z'){
                        small++;
                    }else if(temp >='0' && temp <= '9'){
                        math ++;
                    }else {
                        other++;
                    }
                }
                System.out.println("大写字母:"+big);
                System.out.println("小写字母:"+small);
                System.out.println("数字:"+math);
                System.out.println("非法字符:"+other);
            }    

    9.String类的转换功能

      * byte[] getBytes():把字符串转换为字节数组,(也称编码)。
      * char[] toCharArray():把字符串转换为字符数组。
      * static String valueOf(char[] chs):把字符数组转成字符串。
      * static String valueOf(int i):把int类型的数据转成字符串。
      * 注意:String类的valueOf方法可以把任意类型的数据转成字符串。

      * String toLowerCase():把字符串转成小写。
      * String toUpperCase():把字符串转成大写。
      * String concat(String str):把字符串拼接。

    需求:把一个字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符)
            public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入一个字符串:");
                String str1 = sc.nextLine();
                String str2 = 
                  //链式编程
                  str1.substring(0, 1).toUpperCase().concat(str1.substring(1, str1.length()).toLowerCase());
                System.out.println(str2);
            }
    需求:把数组中的数据按照指定个格式拼接成一个字符串
            * 举例:
                * int[] arr = {1,2,3};    
            * 输出结果:
                * "[1, 2, 3]"
            public static void main(String[] args) {
                int[] arr = {1,2,3};  //定义一个数组
                String str = "[";  //初始化字符串数组的值为“[”
                for (int i = 0; i < arr.length; i++) {  //遍历数组
                    if(i == 2){  //若遍历到最后时 ,需要做的处理
                        str = str + arr[i] + "]";
                    }else {  //某则则是这个处理
                        str = str + arr[i] + ",";
                    }
                }
                System.out.println(str);//打印字符串
            }

    10.String类的其他功能

    * A:String的替换功能及案例演示
      * String replace(char old,char new) //将字符串中的字符old值全部替换成字符new值
      * String replace(String old,String new)
    * B:String的去除字符串两空格及案例演示
      * String trim()
    * C:String的按字典顺序比较两个字符串及案例演示
      * int compareTo(String str)(暂时不用掌握)
      * int compareToIgnoreCase(String str)

    需求:把字符串反转
            * 举例:键盘录入"abc"        
            * 输出结果:"cba"
            public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入一个字符串:");
                String str = sc.nextLine();
                char[] arr = str.toCharArray();//把字符串转化成字符数组
                for (int i = 0; i < arr.length/2; i++) {
                    char temp = arr[i];
                    arr[i] = arr[arr.length - 1 - i];
                    arr[arr.length - 1 - i] = temp;
                }
                String str1 = "" ;
                for (char c : arr) {
                    str1 = str1 + c;
                }
                System.out.println(str1);
            }
    统计大串中小串出现的次数
            public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入较大的字符串:");
                String strbig = sc.nextLine();
                System.out.println("请输入较小的字符串:");
                String strsmall = sc.nextLine();
                int count = 0 ;//计数器
                int index;
                while((index = strbig.indexOf(strsmall)) != -1){
                    strbig = strbig.substring(index + strsmall.length());
                    count++;
                }
                System.out.println(count);
            }
  • 相关阅读:
    javascript优化--10模式(设计模式)01
    javascript优化--09模式(代码复用)02
    限制字符个数显示
    title
    点选词高亮算法
    ng-repeat嵌套的$index
    console.log的问题
    outsideClick 功能,探索
    input 框的 placeholder 另类实现
    ie9 与 placeholder 问题
  • 原文地址:https://www.cnblogs.com/wanghui1316/p/5442233.html
Copyright © 2011-2022 走看看