1. API(Application Programming Interface)
Java API:JDK中提供的各种功能的java类,这些类将底层的实现封装起来,我们不需要关心这些类是如何实现的,只需要掌握如何使用这些类即可。学习API我们可以使用帮助文档。
2. API------Scanner类
/*
* next(): 遇到空格就不再输入
* 结束标志:空格、tab键
*
* nextLine(): 可以接收完整数据
* 结束标志:回车键
* nextInt()+nextLine()一起使用时会导致nextLine没有录入机会
*
* */
public static void main(String[] args) {
System.out.println("请输入:");
Scanner sc = new Scanner(System.in);
String s = sc.next();//输入abc 122
System.out.println(s);//输出abc遇到空格结束输入
System.out.println("请输入:");
int a = sc.nextInt();//输入一个数字+回车
String s1 = sc.nextLine();//无法录入
}
3. API------String类
- String概述:
/*
* String类在 java.lang包下,使用时不需要导包
* Java程序中的所有字符串文字(例如"abc" )都实现为String类的实例(对象)。
* Java字符串是不变的,它们的值在创建后无法更改。
* 字符串在常量池中是共享的
*
* */
public static void main(String[] args) {
String s = "asdf";
int l = s.length();//s可以调用length方法,s为String的对象
s = "abc";//s字符串没有改变,只是让s记录了一个新变量
System.out.println(s);
}
- String常见构造方法:
/*
* public String() 创建一个空白的 String对象,不包含任何内容。
* String(char[] value) 根据传入的字符数组的内容,创建String对象。
* String(String original) 根据传入的字符串内容,创建String对象
* String s = "abc" 直接使用赋值方式创建String对象
*
* String这个类比较特殊,打印他的对象名的时候不会出现内存地址,
* 而是该对象所记录的真实内容(继承、object类)
*
* */
public static void main(String[] args) {
// public String() 创建一个空白的 String对象,不包含任何内容。
String s1 = new String();
System.out.println(s1);
//String(char[] value) 根据传入的字符数组的内容,创建String对象。
char[] c = {'a', 'b', 'c'};
String s2 = new String(c);
System.out.println(s2);
//String(String original) 根据传入的字符串内容,创建String对象
String s3 = new String("asd");
System.out.println(s3);
//String s = "abc" 直接使用赋值方式创建String对象
String s4 = "zxc";
System.out.println(s4);
}
- 通过new创建字符串和双引号创建字符串区别:
以" "给出的字符串,只要字符串序列相同(顺序和大小写),无论在代码中出现几次,JVM都只会创建一个String对象,并在字符串常量池中维护(地址相同)。
字符串常量池:使用双引号创建字符串对象时,系统会检查该字符串是否在字符串常量池中存在,存在则直接复用,不存在则创建。(JDK7开始字符串常量池位置从方法区挪到了堆内存)
通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同但是地址不同。
- String常见面试题:
当字符串之间使用 + 号串联的时候,系统底层会自动创建一个StringBuilder对象,然后再调用其append方法完成拼接,拼接后再调用toString方法转换为String类型 。
public static void main(String[] args){
String s1 = "abc";//地址在字符串常量池
String s2 = "ab";
String s3 = s2 + "c";//StringBuilder在堆内存开辟空间完成拼接,再toString转换为String对象开辟一个新空间
System.out.println(s1 == s3);//输出false
}
Java存在常量优化机制,在编译时就会将 "a" + "b" + "c" 拼接为 "abc",所以下面代码的结果为true
public static void main(String[] args){
String s1 = "abc";
String s2 = "a" + "b" + "c";
System.out.println(s1 == s2);//输出true
}
- 字符串的比较:
public static void main(String[] args){
String s1 = "abc";
String s2 = "ABC";
String s3 = "abc";
System.out.println(s1.equals(s2));//false
System.out.println(s1.equals(s3));//true
//忽略大小写的比较,验证码校验可以使用
System.out.println(s1.equalsIgnoreCase(s2));//true
}
- 字符串的遍历:
public static void main(String[] args){
System.out.println("请输入一个字符串:");
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
//public char charAt(int index):返回指定索引处的char值
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
System.out.println(c);
}
//public char[] toCharArray():将当前字符串拆分为字符数组并返回
char[] c = s.toCharArray();
for (int i = 0; i < c.length; i++) {
System.out.println(c[i]);
}
}
- 字符串的截取:
/*
* 截取字符串:
* String substring(int beginIndex)
* 从传入的索引位置开始截取,一直截取到末尾,返回新的字符串
*
* String substring(int beginIndex, int endIndex)
* 从beginIndex截取到endIndex,返回新字符串,包含头不包含尾
*
* */
public static void main(String[] args){
//以字符串的形式从键盘接收手机号,将中间4位号码屏蔽
//最终效果为:156****1234
Scanner sc = new Scanner(System.in);
System.out.println("请输入11位电话号码:");
String s = sc.nextLine();
String s1 = s.substring(0, 3);
String s2 = s.substring(7);
System.out.println(s1 + "****" + s2);
}
- 字符串的替换:
/*
* 替换字符串:
* String replace(CharSequence target, CharSequence replacement)
* 将当前字符串target的内容,使用replacement替换,返回一个新字符串
* */
public static void main(String[] args){
//键盘录入一个字符串,如果字符串中包含TMD,使用***替换
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = sc.nextLine();
String res = s.replace("TMD", "***");
System.out.println(res);
}
- 字符串的切割:
public static void main(String[] args) {
//从键盘录入学生信息,切割出有效信息,封装为学生对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生信息:");
String m = sc.nextLine();
String[] sArray = m.split(" ");//以空格分隔字符串
int age = Integer.valueOf(sArray[2]);//将Sting类型转换为int
Student stu = new Student(sArray[0], sArray[1], age);
System.out.println(stu.getName() + "学号:" + stu.getNum());
System.out.println(stu.getName() + "年龄:" + stu.getAge());
}
如有错误欢迎留言评论,及时更正。 5月16日 羽露风