一、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提供的方法

  1. toString()方法:转换为String类型的语法格式如下(字符串1.toString();)即将StringBuffer类型的字符串1转换为String类型的对象并返回
  2. 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对比
  1. String:字符串常量,在每次对String类型进行改变时其实都等同于生成了一个新的String对象,所以经常改变内容的字符串最好不要用String类型,因为每次生成对象都会对系统性能产生影响,
  2. StringBuffer:字符串变量,在每次对StringBuffer对象进行改变时,会对StringBuffer对象本身进行操作,而不是生成新的对象,再改变对象引用。所以,在字符串对象经常改变的情况下推荐使用。
  3. StringBuilder:字符串变量,JDK5.0版本以后提供,它和StringBuffer类等价,区别在于StringBuffer类是线程安全的,StringBuilder是单线程的,不提供同步,理论上效率更高。