一、substring字符串截取
1、字符串截取:String substring(int beginIndex, int endIndex)
,它可以从一个大的字符串中把字符串的一部分给截取出来。括号里面传递的就是索引,从 beginIndex
(开始索引) 开始截取,截取到 endIndex
(结束索引)。
PS:
1、包头不包尾,包左不包右。
2、只有返回值才是截取的小串,它对原来的字符串是没有任何影响的,因为字符串本身是不能发生变化的。
2、substring
还有一个重载的方法,就是一个参数的,我们只需要传入一个 beginIndex
,默认截取到末尾。
二、手机号屏蔽
需求:以字符串的形式从键盘接受一个手机号,将中间四位号码屏蔽,最终效果为:131****9468
。
package com.itheima.stringdemo;
public class StringDemo10 {
public static void main(String[] args) {
//1.获取一个手机号码
String phoneNumber = "13112349468";
//2.截取手机号码前面三位,注意 “phoneNumber.substring(0, 3)” 一定要复制给新的变量,原字符串是不改变的!
String start = phoneNumber.substring(0, 3);
//3.截取手机号码后面四位
String end = phoneNumber.substring(7);
//4.拼接
String result = start + "****" + end;
//5.打印
System.out.println(result);
}
}
三、身份证信息查看
身份证的每一位都是有固定的含义:
- 1、2位:省份
- 3、4位:城市
- 5、6位:区县
- 7-14位:出生年、月、日
- 15、16位:所在地派出所
- 17位:性别(奇数男性,偶数女性)
- 18位:个人信息码(随机产生)
要求打印内容方式如下:
人物信息为:
出生年月日:XXXX年X月X日
性别为:男/女
package com.itheima.stringdemo;
public class StringDemo11 {
public static void main(String[] args) {
//1.定义一个字符串记录身份证号码
String id = "321281202001011234";
//2.获取出生年月日
String year = id.substring(6, 10);
String month = id.substring(10, 12);
String day = id.substring(12, 14);
System.out.println("人物信息为:");
System.out.println("出生年月日:" + year + "年" + month + "月" + day + "日");
//3.获取性别
char gender = id.charAt(16);//'3' ---> 3
//利用ASCII码表进行转换
//'0' ---> 48
//'1' ---> 49
//'2' ---> 50
//'3' ---> 51
//'4' ---> 52
//'5' ---> 53
//'6' ---> 54
//'7' ---> 55
//'8' ---> 56
//'9' ---> 57
// 如果忘记了'0'在ASCII码表中对应的数字,可以通过 System.out.println('0' + 0); 获得
// 也可以直接 int num = gender - '0';
int num = gender - 48;
if(num % 2 == 0){
System.out.println("性别为:女");
}else{
System.out.println("性别为:男");
}
}
}
四、replace替换
String replace(旧值, 新值)
—— 替换。
replace()
和 replaceAll()
都是替换所有匹配的字符串。
旧值:你要把谁进行替换;新值:替换成的内容。
注意点:字符串本身是不能发生变化的,只有返回值才是替换之后的结果。
五、敏感词替换
需求1:键盘录入一个 字符串,如果字符串中包含(TMD),则使用***替换
package com.itheima.stringdemo;
public class StringDemo12 {
public static void main(String[] args) {
//1.获取到说的话
String talk = "你玩的真好,以后不要再玩了,TMD";
//2.把里面的敏感词TMD替换为***
String result = talk.replace("TMD", "***");
//3.打印结果
System.out.println(result); // 你玩的真好,以后不要再玩了,***
}
}
需求2:如果要替换的敏感词比较多怎么办?
public class Test10多个敏感词替换 {
public static void main(String[] args) {
//实际开发中,敏感词会有很多很多
//1.先键盘录入要说的话
Scanner sc = new Scanner(System.in);
System.out.println("请输入要说的话");
String talk = sc.next();//后裔你玩什么啊,TMD,GDX,ctmd,ZZ
//2.定义一个数组用来存多个敏感词
String[] arr = {"TMD","GDX","ctmd","ZZ","lj","FW","nt"};
//3.把说的话中所有的敏感词都替换为***
for (int i = 0; i < arr.length; i++) {
//i 索引
//arr[i] 元素 --- 敏感词
talk = talk.replace(arr[i],"***");
}
//4.打印结果
System.out.println(talk);//后裔你玩什么啊,***,***,***,***
}
}
六、查询String类帮助文档
String类 定义在 java.lang
包是Java的核心包。所以我们在使用 String
这个类的包是不需要导包的。
再看下面对类的描述,Java 程序中的所有字符串字面值(如 "abc"
)都作为此类的实例实现,示例就是对象,在Java里面凡是有双引号的都是String这个类的对象。
字符串是常量:它们的值在创建之后不能更改。
关于它的版本,是 JDK1.0
出现的,因此在所有版本当中,都是可以使用的。
再往下,看它的构造
再往下,看它的成员方法,它的成员方法有很多很多,这些方法千万不要去背,以后用到了就到API文档来找就行了。
七、操作字符串其他的类
第一个类在这里拼接了1000000个字符串,右键运行。
它虽然说也能拼接,但是程序一直没有结果,需要等很久很久才能等到结果。
因此当数据量比较大的时候,一般是不会用字符串直接去拼接的。
public class StringBuilderDemo1 {
public static void main(String[] args) {
String s = "";
for (int i = 0; i < 1000000; i++) {
s = s + "abc";
}
System.out.println(s);
}
}
而是使用下列代码的方式,右键运行,‘刷’ 以下结果就出来了。
public class StringBuilderDemo2 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000000; i++) {
sb.append("abc");
}
System.out.println(sb);
}
}