1、概述

API(Application Programming Interface):应用程序编程接口
Java API:指的就是JDK中提供的各种功能的Java类,大家把这些类称为API

2、如何使用API帮助文档

1.打开文档
2.找到搜索框
3.输入要学习的类
4.看类在哪个包下,进行导包
5.看类的描述
6.看类的构造方法
7.看成员方法

3、键盘录入字符串

使用Scanner类的nextline()方法:可以完成的接收到回车字符之前的所有数据
结束标记:回车字符
使用Scanner类的next()方法:遇到空格就不再接收数据
结束标记:空格,tab键
nextIntnextLine方法配合使用的时候,nextLine方法就没有接收键盘录入的机会
原因:nextInt接收数据的时候只接收了数字,留下了回车,而nextLine方法遇到回车就结束了,所以导致nextLine方法就没有接收键盘录入的机会。
建议:键盘录入数据的时候,如果字符串和整数一起接收,建议使用next方法接收字符串

4、String概述

String类在java.lang包下,所以使用的时候不需要导包
String类代表字符串,Java程序中的所有字符串文字(例如“abc”)都被实现为此类的实例
也就是说,Java程序中所有的双引号字符串,都是String类的对象
字符串不可变,它们的值在创建后不能被更改

5、String构造方法

String常见的构造方法:
public String(): 创建一个空白字符串对象,不含有任何内容
public String(char[] chs): 根据字符数组的内容,来创建字符串对象
public String(String original): 根据传入的字符串内容,来创建字符串对象
String s = “abc”; 直接赋值的方式创建字符串对象,内容就是abc

  1. 注意:String这个类比较特殊,打印其对象名时,不会出现内存地址
public static void main(String[] args) {
        // public String(): 创建一个空白字符串对象,不含有任何内容
        String s1 = new String();
        System.out.println(s1);
        // public String(char[] chs): 根据字符数组的内容,来创建字符串对象
        char[] chs = {'a','n','a'};
        String s2 = new String(chs);
        System.out.println(s2);
        // public String(String original): 根据传入的字符串内容,来创建字符串对象
        String s3 = new String("aaa");
        System.out.println(s3);
        // String s = "abc"; 直接赋值的方式创建字符串对象,内容就是abc
        String s4 = "abc";
        System.out.println(s4);
    }
}

6、创建字符串对象对比

构造方法能创建字符串对象,双引号也能创建字符串对象,有什么区别?
注意:==号做比较
基本数据类型:比较的是具体的值
引用数据类型:比较的地址值
以双引号“”方式给出的字符串,只要字符串序列相同(顺序和大小写),无论在程序代码中出现几次JVM都只会建立一个String对象,并在字符串常量池中维护
字符串常量池:当使用双引号创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中存在
不存在:创建
存在:不会重新创建,而是直接复用
注意:字符串常量池在JDK7版本开始从方法区中挪到了堆内存。
结论:双引号创建的字符串对象,在字符串常量池中存储,通过构造方法创建的字符串对象,在堆内存中存储

7、String面试题

public class StringDemo3 {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = new String("abc");//创建两个对象,“abc”在字符串常量池,s2 new会新开辟一个对象
        System.out.println(s1 == s2);//false
    }
}
public class StringDemo1 {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "ab";
        String s3 = s2 + "c";
        System.out.println(s1 == s3);//false
    }
}

当字符串之间使用+号串联(拼接)的时候,,系统底层会自动创建一个StringBuilder对象
然后再调用其append方法完成拼接
拼接后,再调用其toString方法转换为String类型
String类型.png

public class StringDemo2 {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "a" + "b" + "c";
        System.out.println(s1 == s2);//true
    }
}

Java存在常量优化机制,在编译的时候,就会将"a" + "b" + "c"拼接为"abc"

8、字符串的比较

字符串是对象,它比较内容是否相同,是通过一个方法来实现的,这个方法叫:equals()
public boolean equals(Object anObject):将此字符串与指定对象进行比较,由于我们比较的是字符串对象,所以参数直接传递一个字符串。

public class StringEquals {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
        String s3 = "ABC";

        System.out.println(s1.equals(s2));//true
        System.out.println(s1.equalsIgnoreCase(s3));//true
    }
}

equalsIgnoreCase()方法是忽略字符串大小写进行比较的。

9、遍历字符串

方法1:
获取字符串中的每一个字符
使用public char cahrAt(int index)方法:返回指定索引处的char值,字符串的索引也是从0开始的
获取字符串的长度
使用public int length()方法返回此字符串的长度
数组的长度:数组名.length
字符串的长度:字符串长度.length()
数组的长度是属性,字符串的的长度是方法返回。

import java.util.Scanner;

public class Test2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串");
        String s1 = sc.nextLine();
        for (int i = 0; i < s1.length(); i++) {
            System.out.println(s1.charAt(i));
        }

    }
}

方法2:
将字符串拆分为字符数组
public char[] toCharArray():将当前字符串拆分为字符数组并返回

import java.util.Scanner;

public class Test3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串:");
        String s1 = sc.nextLine();
        char[] chrs = s1.toCharArray();
        for (int i = 0; i < chrs.length; i++) {
            System.out.println(chrs[i]);
        }
    }
}

10、统计字符个数

方法:
遍历字符串
对每个字符进行比较:

  • 大写字母:ch >= "A" && ch <= "Z"
  • 小写字母:ch >= "a" && ch <= "z"
  • 数字:ch >= "0" && ch <= "9" ```java import java.util.Scanner;

public class Test4 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println(“请输入字符串:”); String s = sc.nextLine(); char[] chars = s.toCharArray(); int bigCount = 0; int smallCount = 0; int numCount = 0; for (int i = 0; i < chars.length; i++) { if ((chars[i] >= ‘A’) && (chars[i] <= ‘Z’)){ bigCount++; } if ((chars[i] >= ‘a’) && (chars[i] <= ‘z’)){ smallCount++; } if ((chars[i] >= ‘0’) && (chars[i] <= ‘9’)){ numCount++; } } System.out.println(“大写字母为” + bigCount +”个”); System.out.println(“小写字母为” + smallCount +”个”); System.out.println(“数字为” + numCount +”个”); } }

<a name="qizhn"></a>
## 11、字符串截取
方法:<br />`String substring(int beginIndex)`<br />        从传入索引位置处,向后截取,一直截取到末尾,得到新的字符串并返回<br />`String substring(int beginIndex, int endIndex)`<br />从`beginIndex`索引位置开始截取,截取到`endIndex`索引位置,得到新的字符串并返回(包含头,不包含尾)
```java
import java.util.Scanner;
/*
        屏蔽手机号中间四位
 */
public class Test5 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入手机号");
        String telString = sc.nextLine();
        String start = telString.substring(0,3);
        String end = telString.substring(7);
        System.out.println(start + "****" + end);
    }
}

12、字符串替换

方法:
String replace(CharSequence target, CharSequence replacement)
将当前字符串中的target内容,使用replacement进行替换,返回新的字符串。

import java.util.Scanner;
/*
    将TMD替换为***
 */
public class Test6 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入");
        String s  = sc.nextLine();
        String srep = s.replace("TMD","***");
        System.out.println(srep);
    }
}

13、切割字符串

方法:
String[] split(String regex)
根据传入的字符串作为规则进行切割,将切割后的内容存入字符串数组中,并将字符串数组返回

import java.util.Scanner;
/*
    输入张三,23,通过这个信息创建Student对象
 */
public class Test7 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生信息");
        String s = sc.nextLine();
        String[] sArr = s.split(",");
        Student stu = new Student(sArr[0],sArr[1]);
        System.out.println(stu.getName() + "..." + stu.getAge());
    }
}

14、String方法小结

方法名 说明
public boolean equals(Object anObject) 比较字符串的内容,严格区分大小写
public boolean equalsIgnoreCase(String anotherString) 比较字符串的内容,忽略大小写
public int length() 返回此字符串的长度
public char cahrAt(int index) 返回指定索引处的char值
public char[] toCharArray() 将字符串拆分为字符数组并返回
String substring(int beginIndex) 从传入索引位置处,向后截取,一直截取到末尾,得到新的字符串并返回新的字符串
String substring(int beginIndex, int endIndex) beginIndex索引位置开始截取,截取到endIndex索引位置,得到新的字符串并返回(包含头,不包含尾)
String replace(CharSequence target, CharSequence replacement) 将当前字符串中的target内容,使用replacement进行替换,返回新的字符串。
String[] split(String regex) 根据传入的字符串作为规则进行切割,将切割后的内容存入字符串数组中,并将字符串数组返回