Java常用类01

1. Scanner的使用
(1) 在JDK5以后出现的用于键盘录入数据的类。
(2) 构造方法:
  A:讲解了System.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对象
    b:把所有的数据都用字符串获取,然后再进行相应的转换

2. String类的概述和使用
(1) 多个字符组成的一串数据。
其实它可以和字符数组进行相互转换。
(2) 构造方法:
  A:public String()
  B:public String(byte[] bytes)
  C:public String(byte[] bytes,int offset,int length)
  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"的区别?
(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:判断功能
    boolean equals(Object obj)
    boolean equalsIgnoreCase(String str)
    boolean contains(String str)
    boolean startsWith(String str)
    boolean endsWith(String str)
    boolean isEmpty()
  B:获取功能
    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)
    String substring(int start)
    String substring(int start,int end)
  C:转换功能
    byte[] getBytes()
    char[] toCharArray()
    static String valueOf(char[] chs)
    static String valueOf(int i)
    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:按字典比较功能
      int compareTo(String str)
      int compareToIgnoreCase(String str)

3. StringBuffer
(1) 用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了
一个字符串缓冲区类——StringBuffer供我们使用。
(2) StringBuffer的构造方法
  A:StringBuffer()
  B:StringBuffer(int size)
  C:StringBuffer(String str)
(3) StringBuffer的常见功能
  A:添加功能
    append()
    insert()
  B:删除功能
    deleteCharAt()
    delete()
  C:替换功能
    replace()
  D:反转功能
    reverse()
  E:截取功能(注意这个返回值)
    substring()
(4) StringBuffer的练习
  A:String和StringBuffer相互转换
    String -- StringBuffer
      构造方法
    StringBuffer -- String
      toString()方法
  B:字符串的拼接
  C:把字符串反转
  D:判断一个字符串是否对称
(5) 思考题
StringBuffer:同步的,数据安全,效率低。
StringBuilder:不同步的,数据不安全,效率高。
A:String,StringBuffer,StringBuilder的区别
B:StringBuffer和数组的区别?
(6) 注意的问题:
String作为形式参数,StringBuffer作为形式参数。

4. 数组高级以及Arrays
(1) 排序
A:冒泡排序
  相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处。同理,其他的元素就可以排好。

public static void bubbleSort(int[] arr) {
    for(int x=0; x<arr.length-1; x++) {
        for(int y=0; y<arr.length-1-x; y++) {
            if(arr[y] > arr[y+1]) {
                int temp = arr[y];
                arr[y] = arr[y+1];
                arr[y+1] = temp;
            }
        }
    }
}
知识兔

B:选择排序
  把0索引的元素,和索引1以后的元素都进行比较,第一次完毕,最小值出现在了0索引。同理,其他的元素就可以排好。

public static void selectSort(int[] arr) {
    for(int x=0; x<arr.length-1; x++) {
        for(int y=x+1; y<arr.length; y++) {
            if(arr[y] < arr[x]) {
                int temp = arr[x];
                arr[x] = arr[y];
                arr[y] = temp;
            }
        }
    }
}
知识兔

(2) 查找
A:基本查找
  针对数组无序的情况

public static int getIndex(int[] arr,int value) {
    int index = -1;
    for(int x=0; x<arr.length; x++) {
        if(arr[x] == value) {
            index = x;
            break;
        }
    }
    return index;
}
知识兔

B:二分查找(折半查找)
  针对数组有序的情况

public static int binarySearch(int[] arr,int value) {
    int min = 0;
    int max = arr.length-1;
    int mid = (min+max)/2;

    while(arr[mid] != value) {
        if(arr[mid] > value) {
            max = mid - 1;
        }else if(arr[mid] < value) {
            min = mid + 1;
        }
        if(min > max) {
            return -1;
        }
        mid = (min+max)/2;
    }
    return mid;
}
知识兔

(3) Arrays工具类
A:是针对数组进行操作的工具类。包括排序和查找等功能。
B:要掌握的方法
  把数组转成字符串:toString()
  排序:sort()
  二分查找:binarySearch()
(4)把字符串中的字符进行排序
  举例:
    "edacbgf",得到结果"abcdefg"

5. Integer
(1) 为了让基本类型的数据进行更多的操作,Java就为每种基本类型提供了对应的包装类类型
  byte Byte
  shortShort
  intInteger
  longLong
  floatFloat
  doubleDouble
  charCharacter
  booleanBoolean
(2) Integer的构造方法
  A:Integer i = new Integer(100);
  B:Integer i = new Integer("100");
    注意:这里的字符串必须是由数字字符组成
(3) String和int的相互转换
  A:String -- int
    Integer.parseInt("100");
  B:int -- String
    String.valueOf(100);
(4) 其他的功能
  进制转换
(5) JDK5的新特性
  自动装箱基本类型--引用类型
  自动拆箱引用类型--基本类型
    Integer i = 100;
    i += 200;
(6) 思考题
  -128到127之间的数据缓冲池问题:-128到127之间的数据放在一个数据缓冲池中,如果再次新建的数据是该范围内的,不会创建新的空间。

6. Character
(1) Character构造方法
  Character ch = new Character('a');
(2) 要掌握的方法
  A:判断给定的字符是否是大写isUpperCase()
  B:判断给定的字符是否是小写 isLowerCase()
  C:判断给定的字符是否是数字字符 isDigit()
  D:把给定的字符转成大写toUpperCase
  E:把给定的字符转成小写toLowerCase
(3) 案例:
  统计字符串中大写,小写及数字字符出现的次数

计算机