个人主页:Hello Code.
本文专栏:Java零基础指南
更多相关内容请点击前往 Java零基础指南 查看
如有问题,欢迎指正,一起学习~~
文章目录
概述
- API(Application Programming Interface):应用程序编程接口
编写程序去控制踢足球,程序需要向机器人发出向前跑、向后跑、射门、抢球等各种命令。机器人厂商一定会提供一些用于控制机器人的接口类,这些类中定义好了操作机器人各种动作的方法。其实,这些接口类就是机器人厂商提供给应用程序编程的接口,大家把这些类称为API。
- 键盘录入字符串
Scanner sc = new Scanner();
System.out.print("请输入内容:");
String s = sc.nextLine(System.in); //遇到回车、换行结束
//String s = sc.next(System.in); //遇到空格、tab就停止
System.out.println(s);
在键盘录入接收数据的时候,如果是字符串和整数一起接收,建议使用next方法接收字符串
String类
- 概述:String类在java.lang包下,使用时不需要导包。
String类代表字符串,Java程序中的所有字符串字面值(如:“abc”)都作为此类的方法实现
字符串是常量,它们的值在创建后不能更改
- 常见构造方法
public String()
创建一个空白字符串对象,不含有任何内容
public String(char[] chs)
根据字符数组的内容,来创建字符串
public String(String original)
根据传入的字符串内容,来创建字符串对象
String s = "abc";
直接赋值的方式创建字符串对象,内容就是abc
String 这个类比较特殊,打印其对象名的时候,不会出现内存地址,而是该对象所记录的真实内容
- 创建字符串对象的区别对比
以""方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串常量池中维护
字符串常量池:当使用双引号创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中存在。若不存在,则创建;存在则不会重新创建,直接使用
注意:字符串常量池从JDK7开始,从方法区挪到了堆内存
扩展:==
在比较基本数据类型时比较值,在比较引用数据类型时比较地址是否相同
通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同
- 特点:
Java程序中所有双引号字符,都是String类的对象
字符串不可变,它们的值在创建后不能被更改
虽然String的值是不可变的,但是他们可以被共享
当字符串之间使用 + 拼接的时候,系统底层会自动创建一个StringBuilder对象
然后再调用其append方法完成拼接
拼接后,再调用toString方法转换为String类型
- 字符串比较
字符串是对象,他比较内容是否相同,是通过一个方法来实现的,这个方法叫:equals()
public boolean equals(Object anObject):将此字符串与指定对象进行比较。由于我们比较的是字符>串对象,所以参数之间传递一个字符串
String s1 = "abc";
String s2 = "ABC";
s1.equals(s2); //false
//equalsIgnoreCase()方法比较字符串不区分大小写
s1.equalsIgnoreCase(s2); //true
- 案例
// 需求:已知用户名和密码,请用程序实现模拟用户登录,总共给三次机会,登录之后,给出相应的提示
import java.util.Scanner;
public class Test{
public static void main(String[] args){
String userName = "abcde";
String passWord = "abc666";
int count = 0;
Scanner sc = new Scanner(System.in);
for(int i = 0; i < 3; i++){
System.out.print("请输入用户名:");
String user = sc.nextLine();
System.out.print("请输入密码:");
String pass = sc.nextLine();
if(userName.equals(user) && passWord.equals(pass)){
System.out.println("恭喜您,登录成功!");
break;
}else{
System.out.println("账号或密码错误,请重试");
count++;
}
}
if(count >= 3) System.out.println("登录失败次数过多,请稍后重试");
}
}
// 需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串,将字符串拆分为字符数组
// public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的
// public int length():返回此字符串的长度
// public char[] toCharArray():将当前字符串拆分为字符数组并返回
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("请输入字符串:");
String s = sc.nextLine();
/*
for(int i = 0; i < s.length(); i++){
System.out.print(s.charAt(i) + " ");
}
*/
char[] chars = s.toCharArray();
for(int i = 0; i < chars.length; i++){
System.out.print(chars[i] + " ");
}
}
}
//需求: 键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符)
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("请输入字符串:");
String s = sc.nextLine();
char[] chars = s.toCharArray();
int num = 0;
int english = 0;
int English = 0;
for(int i = 0; i < chars.length; i++){
if(chars[i] >= '0' && chars[i] <= '9') num++;
else if(chars[i] >= 'a' && chars[i] <= 'z') english++;
else if(chars[i] >= 'A' && chars[i] <= 'Z') English++;
}
System.out.println("数字:" + num + " 小写字母:" + english + " 大写字母:" + English);
}
}
// 需求:以字符串的形式从键盘接收一个手机号,将中间四位号码屏蔽
// 最终效果:183****4828
/*
截取字符串:
String substring(int beginIndex):
从传入的索引位置处,向后截取,一直截取到末尾,得到新的字符串并返回
String substring(int beginIndex, int endIndex):
从beginIndex索引位置开始截取,截取到endIndex索引位置,得到新的字符串并返回(含头不含尾)
*/
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("请输入手机号:");
String s = sc.nextLine();
String begin = s.substring(0, 3);
String end = s.substring(7, 11);
System.out.println("最终手机号为:" + begin + "****" + end);
}
}
// 需求:键盘录入一个字符串,如果字符串中包含(TMD),则使用***替换
/*
String replace(CharSequence target, CharSequence replacement)
将当前字符串中的target(被替换的旧值)内容,使用replacement(替换的新值)进行替换
返回新的字符串
*/
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("请输入内容:");
String s = sc.nextLine();
String result = s.replace("TMD", "***");
System.out.println("您输入的内容为:" + result);
}
}
// 需求:以字符串的形式从键盘录入学生信息,例如:"张三,23"从该字符串中切割出有效数据,封装为Student学生对象
// String[] split(String regex):根据传入的字符作为规则进行切割,将切割后的内容存入字符串数组中,并将字符串返回(数组)
// 新建一个Student类
public class Student{
private String name;
private String age;
public Student(){
}
public Student(String name, String age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getAge(){
return age;
}
public void setAge(String age){
this.age = age;
}
}
//---------------------------下面为一个新的class文件----------------------------------------------
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("请输入您的信息:");
String stuInfo = sc.nextLine();
String[] sArr = stuInfo.split(",");
Student stu = new Student(sArr[0], sArr[1]);
System.out.println("姓名:" + stu.getName() + " 年龄:" + stu.get)
}
}
StringBuilder
- 概述:StringBuilder 是一个可变的字符串类,我们可以把它看成是一个容器
- 作用:提高字符串的操作效率
- 构造方法:
public StringBuilder()
创建一个空白可变字符串对象,不含有任何内容
public StringBuilder(String str)
根据字符串的内容,来创建可变字符串对象 - 常用方法:
方法名 说明 public StringBuilder append(任意类型) 添加数据,并返回对象本身 public StringBuilder reverse() 返回相反的字符序列 public int length() 返回长度(字符出现的个数) public String toString() 通过toString()就可以实现把StringBuilder转换为String
StringBuilder sb = new StringBuilder();
//链式编程:如果一个方法返回的是对象类型,对象就可以继续向下调用方法
sb.append("red").append("blue").append("green");
- StringBuilder 提高效率原理:
当String类型字符串以 + 拼接时,系统默认在堆内存中new一个StringBuilder类型对象,通过append()方法完成拼接,再通过 toString() 将StringBuilder类型转换为String类型。
而使用StringBuilder则可以省去不必要的步骤
- 案例
// 需求:键盘接收一个字符串,程序判断出该字符串是否是对称字符串,并在控制台打印是或不是
// 对称字符串:123321、111 非对称字符串:123123
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("请输入内容:");
String s = sc.nextLine();
StringBuilder ss = new StringBuilder(s);
String sss = ss.reverse().toString();
if(s.equals(sss)){
System.out.println("是");
}else{
System.out.println("不是");
}
}
}
// 需求:定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。
// 例如:数组为:int[] arr = {1, 2, 3}; 执行方法后的输出结果为:[1,2,3]
public static void main(String[] args){
int[] arr = {
1, 2, 3};
String s = arrayToString(arr);
System.out.println(s);
}
// 定义一个方法,返回值类型 String ,参数列表int[] arr
public static String arrayToString(int[] arr){
StringBuilder sb = new StringBuilder("【");
for(int i = 0; i < arr.length; i++){
if(i == arr.length - 1){
sb.append(arr[i]).append("】");
}else{
sb.append(arr[i]).append(",");
}
}
return sb.toString();
}
推荐阅读:Java集合基础