1.String是什么,可以做什么?
字符串类型,可以定义字符串变量指向字符串对象。
2.String是不可变字符串的原因?
String变量每次的修改其实都是产生并指向了新的字符串对象。
原来的字符串对象都是没有改变的,所以称不可变字符串。
3.创建字符串对象的2种方式
1)直接使用""定义
String name = "小明";
2)通过String类的构造器创建对象
详细方法见API官方文档。
4.字符串对象的特点有哪些?
以""方式给出的字符串对象,在字符串串常量池中存储,而且相同内容只会在其中存储一份。
通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中。
实例:
public class StringDemo {
public static void main(String[] args) {
//直接双引号
String name = "我爱你";
System.out.println(name);
//1.public String():创建一个空白字符串
String s1= new String();
System.out.println(s1);
//2.public String(String)
String s2 = new String("祥鸿");
System.out.println(s2);
//3.public String(char[] c)根据字符数组的内容,来创建字符串对象
char[] chars = {'a','b','c'};
String s3 = new String(chars);
System.out.println(s3);
//4.public String(byte[] b)根据字节数组的内容,来创建字符串对象
byte[] bytes = {97,98,99,66,77};
String s4 = new String(bytes);
System.out.println(s4);
}
}
5.如果是字符串比较应该使用什么方式进行比较,为什么?
使用String提供的equals方法
只关心内容一样就返回true
6.开发中什么时候用==进行比较?
基本数据类型比较时。
实例:
public class StringDemo1 {
public static void main(String[] args) {
//1.正确登录名和密码
String okName = "hehe";
String okPassword = "123456";
//请您输入登录名称和密码
Scanner sc = new Scanner(System.in);
System.out.println("登录名称:");
String name = sc.next();
System.out.println("登录密码:");
String password = sc.next();
//判断用户输入的登录名称和密码
//字符串的内容比较不适合用“==”比较
if (okName.equals(name) && okPassword.equals(password)){
System.out.println("登录成功");
}else {
System.out.println("用户名或者密码错误");
}
//忽略大小写比较内容的API:一般用于验证码的业务
String yz = "aaaa";
String yz1 = "AAAA";
System.out.println(yz.equalsIgnoreCase(yz1));
}
}
常用API实例:
//String常用的API
public class StringDemo2 {
public static void main(String[] args) {
//获取字符串长度
String name = "小红,我爱你";
System.out.println(name.length());
//获取某个索引位置处的字符
char c = name.charAt(1);
System.out.println(c);
System.out.println("-------------遍历字符串中盯得每个字符---------");
for (int i = 0; i < name.length(); i++) {
char ch = name.charAt(i);
System.out.print(ch);
}
System.out.println();
//把字符串转化为字符数组
char[] chars = name.toCharArray();
for (int i = 0; i < chars.length; i++) {
char ch = chars[i];
System.out.print(ch);
}
System.out.println();
//截取内容,包前不包后
String name2 = "Java 真好用";
String s = name2.substring(0, 4);
System.out.println(s);
//从当前索引一直截取到末尾
String rs = name2.substring(5);
System.out.println(rs);
//替换敏感词
String name3 = "金三胖是最厉害的80后,金三胖厉害";
String rs1 = name3.replace("金三胖","***");
System.out.println(rs1);
//判断是否包含语句
System.out.println(name3.contains("金")); //返回true 或 false
//按照某个内容把字符串分隔成字符串数组并返回
String name4 = "小红,小亮,小明,小华";
String[] names = name4.split(",");
for (int i = 0; i < names.length; i++) {
System.out.print(names[i] + "\t");
}
}
}
简易验证码案例:
//使用String完成随机验证码
public class StringExec {
public static void main(String[] args) {
//1.定义可能出现的字符
String data="abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWSYZ0123456789";
//循环五次,每次生成一个随机索引,提取对应的字符
Random r = new Random();
String code = "";
for (int i = 0; i < 5; i++) {
//随机一个索引
int index = r.nextInt(data.length());
char c = data.charAt(index);
code += c;
}
//输出生成的验证码
System.out.println(code);
}
}