API和String以及StringBuilder的介绍
API和String以及StringBuilder的介绍
API:应用程序编程接口
java API:指JDK中提供的各类功能的java类,我们只需要学会如何使用即可,不需要了解底层代码
Random类
这里简单介绍一下Random类:
- Random常用于随机生成自然数
生成Random对象代码:
Random random = new Random();
利用Random对象生成随机数:
random.nextInt();//生成一个随机数
random.nextInt(number)//生成一个从0到number之间的随机数
String类
首先简单介绍一下String:
String类在java.lang包下,所以使用时不需要import包
String类代表字符串,java中所有字符串文字都被实现为此类的实例
字符串的特点:
- 字符串不可变,他们的值在创建后不能被改变
- 虽然String的值不可变,但可以被共享
- 字符串效果上等同于char[],但实际上是byte[]
String对象构造方法
String对象构造方法:
方法名 | 说明 |
---|---|
public String() | 创建一个空白字符串对象,不含有任何内容 |
public String(char[] chs) | 根据字符数组的内容,来创建字符串对象 |
public String(byte[] bys) | 根据字节数组的内容,来创建字符串对象 |
String s = "abc" | 直接赋值的方法创造字符串对象 |
示例代码:
public class Demo1 {
public static void main(String[] args) {
String s1 = new String();
System.out.println("s1:" + s1);
char[] chars = {'a','b','c'};
String s2 = new String(chars);
System.out.println("s2:" + s2);
byte[] bytes = {97,98,99};
String s3 = new String(bytes);
System.out.println("s3:" + s3);
String s4 = "abc";
System.out.println("s4:" + s4);
}
}
String对象的特点
String对象的特点:
在介绍前我们需要了解栈和堆:
- 栈:存放包括main在内的所有有顺序的代码
- 堆:包含常量框和由new创建的对象地址
这里分开介绍由new创建的String对象和直接赋值的String对象:
- new创建的String对象:
JVM会在栈中写出相应代码:String s1 = new String();
但该代码的地址位于堆中,并且该堆指向堆中的常量框中相对应的部分
但由new创建的对象即使内容相同,地址也不相同
- 直接赋值的String对象:
JVM在栈中给出相应代码:String s4 = "abc";
但该代码直接指向常量框中的“abc”
直接赋值的String对象如果内容一样,地址则相同
String方法
下面介绍一些关于String的方法:
方法名 | 说明 |
---|---|
public boolean equals(Object anObject) | 比较字符串内容,严格区分大小写 |
public char charAt(int index) | 返回指定索引处的char值 |
public int length() | 返回此字符串的长度 |
下面给出相关案例逐步介绍方法:
- public boolean equals(Object anObject):
案例:用户登录
需求:已知用户名和密码,请用程序实现模拟用户登录;一共三次机会,机会没有后给出相关提示
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args) {
//设置用户和密码:
String username = "HOU";
String usercode = "ooo";
//明确三次,使用循环:
for (int i = 0; i < 3; i++) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入账号:\n");
String name = scanner.nextLine();
System.out.println("输入密码:\n");
String code = scanner.nextLine();
//判断是否满足
if(username.equals(name) && usercode.equals(code)){
System.out.println("正在进入游戏中...");
break;
} else if (2-i == 0) {
System.out.println("你的账户被封禁");
}else {
System.out.println("你还有" + (2-i) + "次机会");
}
}
}
}
- public char charAt(int index)和public int length():
案例:遍历字符串
需求:键盘录入一个字符串,使用编程实现在控制台遍历该字符串
import java.util.Scanner;
public class Demo3 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
//这里采用s.charAt(i)来获取字符串下标为i的字符
for (int i = 0; i < s.length(); i++) {
System.out.println(s.charAt(i));
}
}
}
拼接字符串
下面给出一个拼接字符串的案例:
需求:定义一个方法,把int数组中的数据按照指定格式拼接成一个字符字符串返回并且输出
public class Demo5 {
public static void main(String[] args) {
//定义数组
int[] arr = {1,2,3};
//采用方法转换
String s = intToString(arr);
System.out.println(s);
}
//方法intToString
public static String intToString(int[] arr){
//设置返回值
String result = "";
result += "[";
//利用循环拼接:
for (int i = 0; i < arr.length; i++) {
//判断,如果是其他位置,需要加空格,如果最后一位不用加空格:
if(i == arr.length-1){
result += arr[i];
} else {
result += arr[i];
result += " ";
}
}
result += "]";
return result;
}
}
我们可以看到在字符串添加数组时不方便,而且在底层会反复改变字符串(实际上是更换字符串占用空间)
所以下面我们将会介绍到StringBuilder
StringBuilder类
StringBuilder类是一个可变的字符串类,我们可以把它看作一个容器
StringBuilder对象构造方法
方法名 | 说明 |
---|---|
public StringBuilder() | 创建一个空白可变字符串,不含有任何内容 |
public StringBuilder(String str) | 根据字符串的内容,创建可变字符串对象 |
下面给出代码展示:
public class Demo1 {
public static void main(String[] args) {
//无参构造
StringBuilder sb = new StringBuilder();
System.out.println("sb:" + sb);
System.out.println("sb.length:" + sb.length());
//有参构造
StringBuilder sb2 = new StringBuilder("Hello");
System.out.println("sb2:" + sb2);
System.out.println("sb2.length:" + sb2.length());
}
}
编译结果:
sb:
sb.length:0
sb2:Hello
sb2.length:5
StringBuilder方法
下面介绍一些关于StringBuilder的方法:
方法名 | 说明 |
---|---|
public StringBuilder append(任何类型) | 添加数据并返回对象本身 |
public StringBuilder reverse() | 返回相反的字符序列 |
下面进行代码展示:
public class Demo1 {
public static void main(String[] args) {
//无参构造
StringBuilder sb = new StringBuilder();
System.out.println("sb:" + sb);
System.out.println("sb.length:" + sb.length());
//有参构造
StringBuilder sb2 = new StringBuilder("Hello");
System.out.println("sb2:" + sb2);
System.out.println("sb2.length:" + sb2.length());
//append方法:
sb.append("123");
System.out.println("sb:" + sb);
System.out.println("sb.length:" + sb.length());
//append链式方方法:
sb.append("123").append("123");
System.out.println("sb:" + sb);
System.out.println("sb.length:" + sb.length());
//reverse颠倒方法:
sb.reverse();
sb.append("123").append("123");
System.out.println("sb:" + sb);
System.out.println("sb.length:" + sb.length());
}
}
编译结果:
sb:
sb.length:0
sb2:Hello
sb2.length:5
sb:123
sb.length:3
sb:123123123
sb.length:9
sb:321321321123123
sb.length:15
String和StringBuilder相互转换:
- StringBuilder->String:
public String.toString();
- String->StringBuilder:
public StringBuilder(String s);
下面进行代码展示:
public class Demo2 {
public static void main(String[] args) {
//设置原参数:
String s = "abc";
StringBuilder sb = new StringBuilder("abcd");
//String->StringBuilder:
StringBuilder sbb = new StringBuilder(s);
//StringBuilder->String:
String ss = sb.toString();
}
}
拼接字符串
我们之前采用String类型拼接字符串太过浪费内存
于是我们改用StringBuilder拼接字符串:
public class Demo3 {
public static void main(String[] args) {
int[] arr = {1,2,3};
String s = intToString(arr);
System.out.println(s);
}
public static String intToString(int[] arr){
//设置返回值
StringBuilder sb = new StringBuilder();
sb.append("[");
//利用循环拼接:
for (int i = 0; i < arr.length; i++) {
//判断,如果是其他位置,需要加空格,如果最后一位不用加空格:
if(i == arr.length-1){
sb.append(arr[i]);
} else {
sb.append(arr[i]).append(" ");
}
}
sb.append("]");
String s = sb.toString();
return s;
}
}
结束语
好的,关于API,Random,String以及变种StringBuilder的讲解就到这里