一、String类的概述及常用方法
概述
String类提供了许多有用的方法,例如,获得字符串的长度、对两个字符串进行比较、连接两个字符串以及提取一个字符串中的某一部分等。可以使用String类提供的方法来完成对字符的操作。
String类的常用方法
1)求字符串长度length():调用length()方法的语法格式如下
字符串.length();
length() 返回字符串的长度
示例:注册新用户,要求密码长度不能小于6位
import java.util.Scanner;
public class Register {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String uname,pwd;
System.out.println("请输入用户姓名");
uname = input.next();
System.out.println("请输入密码");
pwd =input.next();
if (pwd.length()>=6){
System.out.println("注册成功");
}else{
System.out.println("密码长度不能小于6位");
}
}
}
2)字符串比较:
字符串比较的语法格式如下:
字符串1.equals(字符串2)
比较两个字符串的值是否相同,返回值为boolean类型,如果相同,则返回真值,否则返回假值。
示例:注册成功后,实现登录验证。根据上一个注册的代码来匹配
import java.util.Scanner;
public class Register {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String uname,pwd;
System.out.println("请输入用户姓名");
uname = input.next();
System.out.println("请输入密码");
pwd =input.next();
if (pwd.length()>=6){
System.out.println("注册成功");
}else{
System.out.println("密码长度不能小于6位");
}
String uname1,pwd1;
System.out.println("请输入登录用户名");
uname1=input.next();
System.out.println("请输入登录密码");
pwd1=input.next();
if (uname.equals(uname1) && pwd.equals(pwd1)){
System.out.println("登录成功");
}else{
System.out.println("注册失败");
}
}
}
(3)忽略字符串的大小写equalsIgnoreCase()
具体用法:字符串1.equalsIgnoreCase(字符串2)
示例:登录时不考虑用户名大小写的问题,实现登录
import java.util.Scanner;
public class Register {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String uname,pwd;
System.out.println("请输入用户姓名");
uname = input.next();
System.out.println("请输入密码");
pwd =input.next();
if (pwd.length()>=6){
System.out.println("注册成功");
}else{
System.out.println("密码长度不能小于6位");
}
String uname1,pwd1;
System.out.println("请输入登录用户名");
uname1=input.next();
System.out.println("请输入登录密码");
pwd1=input.next();
if (uname.equalsIgnoreCase(uname1) && pwd.equalsIgnoreCase(pwd1)){
System.out.println("登录成功");
}else{
System.out.println("注册失败");
}
}
}
另外String类提供了两个方法改变字符串中字符的大小写
toLowerCase():转换字符串中的英文字符为小写
toUpperCase():转换字符串中的英文字符为大写
关键代码
if (uname.toLowerCase().equals((uname1).toLowerCase()) && pwd.toLowerCase().equals((pwd1).toLowerCase())){
System.out.println("登录成功");
}else{
System.out.println("注册失败");
}
(4)字符串的连接
字符串的连接语法格式:
- 字符串1.concat(字符串2);
字符串2拼接到字符串1的后面,返回拼接后的新字符串
示例
public class Connect {
public static void main(String[] args) {
String s = new String ("您好");
String name = new String("张三");
String sentence = s.concat(name);
System.out.println(sentence);
}
}
(5)字符串提取和查询
常用方法:
方法 | 说明 |
---|---|
public int indexOf(int ch) | 搜索并返回第一个出现字符ch的位置 |
public int indexOf(String value) | 搜索并返回第一个出现字符串value的位置 |
public int lastIndexOf(int ch) | 搜索并返回最后一个出现字符的位置 |
public int lastIndexOf(String value) | 搜索并返回最后一个出现字符串value的位置 |
public String substring(int index) | 提取从指定索引位置开始的部分字符串 |
public String substring(int beginindex,int endindex) | 提取beginindex和endindex之间的字符串 |
public String trim | 截取字符串前后的空格后返回新的字符串 |
示例:学生使用作业提交系统提交java作业时,输入java原文件名,并输入自己的电子邮箱,提交前系统检查:是否是合法的java文件名:电子邮箱是否为合法电子邮箱。编写代码,实现提交前验证功能。
public class JieQu {
public static void main(String[] args) {
boolean fileCorrect = false;//标志文件名是否正确
boolean emailCorrect = false;//标志邮箱是否正确
Scanner input = new Scanner(System.in);
System.out.println("---欢迎进入作业提交系统---");
System.out.println("请输入Java源文件名");
String fileName = input.next();
System.out.println("请输入邮箱");
String email = input.next();
//检查java文件名
int index = fileName.lastIndexOf(".");
if (index!=-1 && index!=0 && fileName.substring(index+1,fileName.length()).equals("java")){
fileCorrect = true;//标志文件名是否正确
}else {
System.out.println("文件名无效");
}
//检查电子邮箱格式
if (email.indexOf("@")!=-1 && email.indexOf(".")>email.indexOf("@")){
emailCorrect = true;
}else{
System.out.println("邮箱无效");
}
//输出检测结果
if (fileCorrect && emailCorrect){
System.out.println("作业提交成功");
}else {
System.out.println("作业提交失败");
}
}
}
(5)字符串拆分
字符串拆分的语法格式如下:
- 字符串名.split(separator.limit)
separator是可选项,表示根据匹配指定的正则表达式来拆分字符串,如果匹配不上,则结果数组只有一个元素即字符串。
limit可选项,该值用来限制返回数组中的元素个数。
示例:将一段每句都以空格结尾的歌词拆分后按行输出
public class ChaiFen {
public static void main(String[] args) {
String words = "长亭外 古道边 芳草碧连天 晚风扶 柳笛残声 夕阳山外山";
String[] printWord = new String[100];//定义接收数组
System.out.println("****原歌词格式****\n"+words);
printWord = words.split(" ");
System.out.println("****拆分后歌词格式****\n");
for (int i = 0; i < printWord.length; i++) {
System.out.println(printWord[i]);
}
}
}
二、StringBuffer类和StringBuilder类
2.1使用StringBuffer类处理字符
StringBuffer类也是可以来存储字符串的,而且他是比String类更高效地存储字符串的一中引用数据类型。特别是对字符串进行连接操作时,使用StringBuffer类可以大大提高程序的执行效率。
1)声明StringBuffer对象并初始化的方法:
StringBuffer s = new StringBuffer(“青春无悔”)
2)常用的StringBuffer提供的方法
- toString()方法:转换为String类型的语法格式如下(字符串1.toString();)即将StringBuffer类型的字符串1转换为String类型的对象并返回
- append()方法:追加字符串的语法格式如下(字符串.append(参数);)即将参数连接到字符串后并返回(可以追加任何类型值追加到字符串后)
示例:使用StringBuffer类实现字符串追加
public class Connect1 {
//使用StringBuffer类实现字符追加
public static void main(String[] args) {
StringBuffer s =new StringBuffer("青春无悔");
int num = 110;
//在字符串后面追加字符串
StringBuffer s1 =s.append("我心永恒");
System.out.println(s1);
//在字符串后面追加字符
StringBuffer s2 = s1.append("啊");
System.out.println(s2);
//在字符串后面追加整型数字
StringBuffer s3 =s2.append(num);
System.out.println(s3);
}
}
3.insert()方法:插入字符串
语法格式:字符串.insert(位置,参数)
将参数插入到字符串指定位置后并返回,参数值可以是包括String的任何类型
示例 :编写一个方法,实现将一个数字字符串转换成以逗号分隔的数字串,即从右边开始每3个数字用逗号分隔。
public class FenGe {
//示例 :编写一个方法,实现将一个数字字符串转换成以逗号分隔的数字串,即从右边开始每3个数字用逗号分隔。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//接收数字串,存放于StringBuffer类型的对象中
System.out.println("请输入一串数字");
String nums = input.next();
StringBuffer str = new StringBuffer(nums);
//从前往后每隔3位添加一个逗号
for (int i = str.length()-3; i>0 ; i=i-3) {
str.insert(i,",");
}
System.out.println(str);
}
}
2.2使用StringBuilder类处理字符串
它与StringBuffer的方法基本一样,只是它的执行相比较来说是比较块的,这里就不再举例。
2.3String、StringBuffer、StringBuilder对比
- String:字符串常量,在每次对String类型进行改变时其实都等同于生成了一个新的String对象,所以经常改变内容的字符串最好不要用String类型,因为每次生成对象都会对系统性能产生影响,
- StringBuffer:字符串变量,在每次对StringBuffer对象进行改变时,会对StringBuffer对象本身进行操作,而不是生成新的对象,再改变对象引用。所以,在字符串对象经常改变的情况下推荐使用。
- StringBuilder:字符串变量,JDK5.0版本以后提供,它和StringBuffer类等价,区别在于StringBuffer类是线程安全的,StringBuilder是单线程的,不提供同步,理论上效率更高。