【Java】API基础

个人主页: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):将此字符串与指定对象进行比较。由于我们比较的是字符>串对象,所以参数之间传递一个字符串

扫描二维码关注公众号,回复: 13731578 查看本文章
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集合基础

猜你喜欢

转载自blog.csdn.net/qq_24980365/article/details/121662593
今日推荐