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键nextInt
和nextLine
方法配合使用的时候,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
注意: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类型
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) |
根据传入的字符串作为规则进行切割,将切割后的内容存入字符串数组中,并将字符串数组返回 |