1. String 类
字符串是 Java 中特殊的类,使用方法像一般的基本数据类型,被广泛应用在 Java 编程中。
Java 没有内置的字符串类型,而是在标准 Java 类库中提供了一个 String 类来创建和操作字符串。
在 Java 中定义一个字符串最简单的方法是用双引号把它包围起来。
这种用双引号括起来的一串字符实际上都是 String 对象,如字符串“Hello”在编译后即成为 String 对象。
因此也可以通过创建 String 类的实例来定义字符串。
不论使用哪种形式创建字符串,字符串对象一旦被创建,其值是不能改变的,但可以使用其他变量重新赋值的方式进行更改。
1.1引用字符串常量
' ' 字符 1个
" " 字符串 多个
String a = "建团一百周年";
String a;
a = "建团一百周年";
1.2 String()
初始化一个新创建的 String 对象,表示一个空字符序列。
1.3 利用字符数组
char[ ] ch = {'建','团','一','百','周','年'};
String a = new String(ch)
1.4 提取字符数组中的一部分
char[ ] ch = {'举','办','建','团','一','百','周','年','晚','会'};
String a = new String(ch,2,8);
2 连接字符串
2.1 连接字符串
与绝大多数的程序设计语言一样,Java 语言允许使用“+”号连接(拼接)两个字符串。
“+”运算符是最简单、最快捷,也是使用最多的字符串连接方式。
在使用“+”运算符连接字符串和 int 型(或 double 型)数据时,
“+”将 int(或 double)型数据自动转换成 String 类型。
int[] no = new int[] { 501, 101, 204, 102, 334 }; // 定义学号数组
String[] names = new String[] { "张城", "刘丽丽", "李国旺", "孟红霞", "贺宁" }; // 定义姓名数组
String[] classes = new String[] { "数学", "语文", "数学", "英语", "英语" }; // 定义课程数组
System.out.println("本次考试学生信息如下:");
// 循环遍历数组,连接字符串
for (int i = 0; i < no.length; i++) {
System.out.println("学号:" + no[i] + "|姓名:" + names[i] + "|课程:" + classes[i] + "|班级:" + "初二(三)班");
}
}
本次考试学生信息如下:
学号:501|姓名:张城|课程:数学|班级:初二(三)班
学号:101|姓名:刘丽丽|课程:语文丨班级:初二(三)班
学号:204|姓名:李国旺|课程:数学|班级:初二(三)班
学号:102|姓名:孟红霞|课程:英语|班级:初二(三)班
学号:334|姓名:贺宁|课程:英语|班级;初二(三)班
2.使用 concat() 方法
在 Java 中,String 类的 concat() 方法实现了将一个字符串连接到另一个字符串的后面。
字符串 1.concat(字符串 2);
public static void main(String[] args) {
String info = "三国演义、";
info = info.concat("西游记、");
info = info.concat("水浒传、");
info = info.concat("红楼梦");
System.out.println(info);
String cn = "中国";
System.out.println(cn.concat("北京").concat("海淀区").concat("人民公园"));
}
执行该段代码,
三国演义、西游记、水浒传、红楼梦
中国北京海淀区人民公园
2.3.连接其他类型数据
前面介绍的例子都是字符串与字符串进行连接,其实字符串也可同其他基本数据类型进行连接。如果将字符串同这些数据类型数据进行连接,此时会将这些数据直接转换成字符串。
System.out.println("我买了一本图书,名字是:"+book+"\n 价格是:"+price+"\n我每天阅读"+(price+readtime)+"小时");
3 提取字符串信息
1.长度 字符串名.length();
String a = "建团一百周年";
int b = a.length();
2.获取指定字符 字符串名.charAt(序号);
String a ="建团一百周年";
char b = a.charAt(3);//百
获取字符串位置
String a = "abacadaeaf";
int b = a.indexof("a");//0
int c = a.lastIndexof("a");//8
int d = a.indexof("a",3);
int e = a.last
在学生信息管理系统中对管理员密码有这样的规定,即密码长度必须大于 6 位且小于 12 位。因为密码太短容易被破解,太长的话又不容易记住。这就需要首先获取用户输入的密码字符串,然后调用 length() 方法获取长度,再做进一步的长度判断,最终实现代码如下所示:
public static void main(String[] args) {
String sys = "学生信息管理";// 字义一个字符串表示系统名称
System.out.println("欢迎进入《" + sys + "》系统");// 输出系统名称
System.out.println("请设置一个管理员密码:");
Scanner input = new Scanner(System.in);
String pass = input.next();// 获取用户输入的密码
int length = pass.length();// 获取密码的长度
if (length > 6 && length < 12) {
System.out.println("密码长度符合规定。");
System.out.println("已生效,请牢记密码:" + pass);
} else if (length >= 12) {
System.out.println("密码过长。");
} else {
System.out.println("密码过短。");
}
}
欢迎进入《学生信息管理》系统
请设置一个管理员密码:
123456
密码过短。
欢迎进入《学生信息管理》系统
请设置一个管理员密码:
abc12345678
密码长度符合规定。
已生效,请牢记密码:abc12345678
4.判断首尾内容
String a = "建团一百周年";
Bollean b = a.startWith("建团");//判断是否以建团结尾;
Bollean c = a.endWith("建团");//判断是否以建团开始;
获取字符串数组 char[]ch = 字符串.toCharArray();
String a = "建团一百周年";
char[ ] ch = a.toCharArray();
判断子串是否存在 Boolean b = 字符串名.contains(子串);
String a = "建团一百周年";
Boolean b =a.contain("一百");
5.字符串的操作
1.截取字符串 substring(前序号,后序号);
String a = "建团一百周年";
String b = a.substring(2,4);
substring(前序号,后序号)
部分替换 String restr=str.replace; 全部替换 正则表达式(数字) String restrAll=str.replaceAll
2.字符串替换
replace:
String a = "建团一百周年";
a.replace("团","校");
replaceAll(老<可传正则表达时>,新):
String a = "建团一百周年";
a.replaceAll("团",“校”);
3.字符串分割
字符串.split(子串);
String a = "建团一百周年";
a.split("一百");
// TODO Auto-generated method stub
String str = "192.168.0.1";//创建字符串
String[] firstArray=str.split("\\.");//按照“”进行分割
String[]secondArray=str.split("\\.",2);//按照“”进行两次分制
System.out.println("str的原值为:["+str+"]");//输出s原值
//输出全部分结果
System.out.print("全部分割的结果:");
for (String a :firstArray) {
System.out.print("[" +a+"]");
}
System.out.println();//换行
//输出分两次结果
System.out.print("分割两次的结果:");
for (String a :secondArray){
System.out.print("["+a+"]");
}
System.out.println();
}
}
字符串.split(子串<可传正则表达时>,次数);
大小写转换
大转小:字符串.toLowerCase();
小转大:字符串.toUpperCase();
*比较字符串是否相等
a==b 位置
a.equals 值
a.equalsIgnoreCase(b)
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="a b cd efg";//利用正则表达式,将字符串中所有的空白内容都换成"";
String shortstr= str.replaceAll("\\s", "") ;// 创建字符串堆
System.out.println("str的原值是:[" + str + "]");//输出结果
System.out.println("删除空内容之后的值是:["+ shortstr + "]");//输出结果
}
}
去除空白内容
字符串.trim();
*比较字符串是否相等
a==b 位置
a.equals(b) 值
a.equalsIgnoreCase(b)
格式化字符串 format("格式", . . . )
日期和时间字符串格式化
Date d = new Date
String str = String.format("转换符",d)
可变字符串
类名 对象类型 执行效率 线程安全性
String 指向另外的空间 常量 慢 不安全
StringBuffer 指向在原来的基础上添加 变量 中 有锁 安全
Stringbuilder 在原来的基础上添加 变量 快 无 锁 不安全
StringBuffer和Stringbuilder 的使用方法:
追加 字符串名.append (需要追加的值);
修改某个元素的值 字符串名.setCharAT(序号,值);
public static void main(String[] args) {
// TODO Auto-generated method stub
StringBuffer sbf=new StringBuffer("门前大桥下,");//创建StringBuffer 对象
sbf.append("游过一群鸭,");// 追加字符串常量
StringBuffer tmp=new StringBuffer("快来快来数一数,");// 追加StringBuffer 对象
sbf.append(tmp); int x=24678;
sbf.append(x);//追加整型变量
System.out.println(sbf.toString());// 输出}
}
}
StringBuffer和Stringbuilder 的使用方法:
插入 字符串名.insert(序号,值);
反转 字符串名.reverse();
删除 字符串名.delate(前序号,后序号);
public static void main(String[] args) {
// TODO Auto-generated method stub
StringBuffer sbf = new StringBuffer("ABCDEFG");// 创建字符串序列
int lenght = sbf.length();// 获取字符串序列的长度
char chr = sbf.charAt(5); // 获取索引为5的字符
int index = sbf.indexOf("DEF");// 获取DEF字符串所在的索引位置
String substr = sbf.substring(0, 2);// 截取从索引0开始至索引2之间的字符串
StringBuffer tmp = sbf.replace(2, 5, "1234");// 将从索引2开始至索引5之间的字符序列替换成"1234"
System.out.println("sbf的原值为:" + sbf);//输出
System.out.println("sbf的长度为:" + lenght);//输出
System.out.println("索引为5的字符为:" + chr);//输出
System.out.println("DEF字符串的索引位置为:" + index);//输出
System.out.println("索引0开始至索引2之间的字符串:" + substr);//输出
System.out.println("替换后的字符串为:" + tmp);//输出
}
}
追加 字符串名.append(需要追加的值);
设定某一个元素值 字符串名.setCharAt(序号,值);
插入 字符串名.insert(序号,值);
反转 字符串.reverse();
删除 字符串名.delete(前序号,后序号).