Java基础-----String类

文章目录

  • 1. String字符串类
    • 1.1 简介
    • 1.2 创建String
    • 1.3 构造方法
    • 1.4 连接操作符
    • 1.5 常用方法
    • 1.6 案列
      • 1.6.1 检验邮箱地址是否正确
      • 1.6.2 比较验证码

1. String字符串类

1.1 简介

  • String不是基本数据类型,是一种引用类型
  • String代表一组不可改变的Unicode字符序列。String类对象的内容一旦被初始化,不能再改变
  • String类是final修饰的终结类,不能产生子类
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {}

1.2 创建String

  • 静态方式创建:String str=“abc”; 在方法区常量池中产生唯一一个字符串对象,如果有另外一个引用指向了相同的字符串,则两个引用变量的地址相同

  • 动态方式创建:String str=new String(“abc”);在堆内存中会产生一个不同的对象,会产生两个对象(堆和常量池中)

String str="abc";//静态创建
String str1=new String("abc");//动态创建
System.out.println(str==str1);//false  
System.out.println(str.equals(str1));//true

1.3 构造方法

  • new String();
  • new String(“abc”);
  • new String(char类型数组);
  • new String(char类型数组,数组下标起始位置,取出数组的长度);
  • new String(byte类型数组);
  • new String(byte类型数组,数组下标起始位置,取出数组的长度);
String str=new String("abc");
String str1=new String();
System.out.println(str1.length());//0
String str="adfhkjl";
char[] chars = str.toCharArray();//将字符串转成字符串数组
for (char c : chars) {
	System.out.println(c);
}
		char[] c={'a','b','c','d','e'};
        String str=new String(c);//将字符串数组转成字符串
        System.out.println(str);//abcde
		char[] c={'a','b','c','d','e'};
		//new String(char类型数组,数组下标起始位置,取出数组的长度);
        //从c中索引为1的位置,选取三个作为一个字符串
        String str=new String(c,1,3);
        System.out.println(str);//bcd
		byte[] b={65,66,67,68,69};
        String str=new String(b);
        System.out.println(str);//ABCDE
		byte[] b={65,66,67,68,69};
        String str=new String(b);
        //new String(byte类型数组,数组下标起始位置,取出数组的长度);
        String str1=new String(b,1,4);
        System.out.println(str);//ABCDE
        System.out.println(str1);//BCDE

1.4 连接操作符

可以使用“+”作为连接符,任何的数据类型和字符串使用加号连在一起,最后都会变成字符串类型

		String str="abc";
        str=str+"ccc"+12;
        System.out.println(str);//abcccc12
        str=12+30+str;
        System.out.println(str);//42abcccc12
		String str=null;
        str=str+"abc";
        System.out.println(str);//nullabc
String str="abc";
String str1="def";
String str2="abcdef";
//变量相加,先开辟空间地址,再做拼接,再做比较
System.out.println(str2==str+str1);//false
System.out.println(str2.equals(str+str1));//true
//先做拼接,abcdef,再去常量池中查找
System.out.println(str2=="abc"+"def");//true   
System.out.println(str2.equals("abc"+"def"));//true

1.5 常用方法

length() 返回int类型的值,获取字符串长度
equals(String) 判断两个字符串中的字面量值是否相等
equalsIgnoreCase(String) 不区分大小写比较字面量值是否相等
indexOf(String) 查找给定值在字符串中第一次出现的下标位置。如果值不存在,则返回-1
indexOf(String,int) 查找给定值在字符串中给定索引位置开始,第一次出现的下标位置。如果值不存在,则返回-1
lastIndexOf(String) 查找给定值在字符串中最后一次出现的下标位置。如果值不存在,则返回-1
lastIndexOf(String,int) 查找给定值在字符串中给定索引位置开始,最后一次出现的下标位置。如果值不存在,则返回-1
toUpperCase() 将字符串中所有字符都转换为大写
toLowerCase() 将字符串中所有字符都转换为小写
charAt(int) 返回下标引处的char值
String str="afasFEHSJKFH";
System.out.println(str.length());//12
String str="afasFEHSJKFH";
String str1="afasFEHsjKFh";

System.out.println(str.equals(str1));//false
//equalsIgnoreCase(String):不区分大小写比较字面量值是否相等
System.out.println(str.equalsIgnoreCase(str1));//true
String str="afabcde";
//**indexOf(String):查找给定值在字符串中第一次出现的下标位置
int index = str.indexOf("a");
int index1 = str.indexOf(99);
int index2 = str.indexOf("abc");
int index3 = str.indexOf("x");
int index4 = str.indexOf("a", 1);//从下标位置为1的地方开始查找
System.out.println(index);//0
System.out.println(index1);//4   c的ASCII码是99
System.out.println(index2);//2
System.out.println(index3);//-1 如果值不存在,则返回-1
System.out.println(index4);//2
String str="afabcade";
//lastIndexOf(String):返回指定子字符串最后一次出现的字符串中的索引
int index = str.lastIndexOf("a");
System.out.println(index);//5
toUpperCase() 将字符串中所有字符都转换为大写
toLowerCase() 将字符串中所有字符都转换为小写
charAt(int) 返回下标引处的char值
String str="afABCade";
 String s = str.toUpperCase();//全部转成大写
 String s1=str.toLowerCase();//全部转成小写
 System.out.println(s);//AFABCADE
 System.out.println(s1);//afabcade
String str="afABCade";
char c=str.charAt(3);//获取索引位置的字符
System.out.println(c);//B
String str="afABCade";
for(int i=0;i<str.length();i++){//获取整个字符串
    char c=str.charAt(i);
    System.out.print(c+"\t");
}
substring(int) 对字符串进行截取,从指定索引位置开始,一直截取到最后
substring(int,int) 对字符进行截取,从指定开始位置,截取到结束位置(不包含结束位置)
String str="abcdEFGbcdf";
String s=str.substring(3);//从下标为3的位置一直截取到最后
System.out.println(s);//dEFGbcdf
String s1=str.substring(3,6);//从下标为3的位置一直截取到下标为5的位置(不包括6这个位置)
System.out.println(s1);//dEF
trim() 将字符串前后空格去除(只能去除前后的空格,中间的空格无法去除)
concat(String) 字符串连接 和+实现相同的功能,如果字符串是null值不能使用,并且只能传字符串参数,其他类型不可以使用
String str="     abcdEFGbcdf    ";
String str1="123";
//trim():将字符串前后空格去除(只能取出前后的空格,中间的空格无法去除)
System.out.println(str.trim()+str1);//abcdEFGbcdf123
//concat(String):字符串连接  和+实现相同的功能
System.out.println(str.trim().concat(str1));//abcdEFGbcdf123
String str="abc";
String str1=null;
System.out.println(str.concat(str1));//报空指针异常
System.out.println(str1.concat(str));//报空指针异常
Integer x=123;
System.out.println(str+x);//abc123
//concat(String):只能传字符串参数,其他类型不可以使用
System.out.println(str.concat(x));//报错
getBytes() 将字符串转换成byte数组
toCharArray() 将字符串转换成char数组
String str="abc";
byte[] bytes = str.getBytes();
for (byte b : bytes) {
    System.out.println(b);//97  98  99
}
char[] chars = str.toCharArray();
System.out.println(chars);//abc
contains(String) 判断在字符串是否包含给定值,返回boolean类型值
startsWith(String) 判断字符串是否以给定值作为开始
startsWith(String,int) 判断字符串从索引位置,是否以给定值作为开始
endsWith(String) 判断字符串是否以给定值作为结束
String str="abcdef";
boolean ab = str.startsWith("ab");//判断字符串str是否以ab作为开始
System.out.println("ab = " + ab);//ab = true
boolean ax = str.startsWith("ax");
System.out.println("ax = " + ax);//ax = false
boolean ab1 = str.startsWith("ab", 1);//判断在下标位置为1的地方,是否以ab作为开始
System.out.println("ab1 = " + ab1);//ab1 = false
boolean ab2 = str.startsWith("ab", 0);
System.out.println("ab2 = " + ab2);//ab2 = true
boolean ef = str.endsWith("ef");
System.out.println("ef = " + ef);//ef = true
boolean e = str.endsWith("e");
System.out.println("e = " + e);//e = false
replace(char,char) 对字符串制定字符,使用新的字符进行替换
String str="abcdabef";
String s = str.replace("c", "e");
System.out.println("s = " + s);//s = abedabef
String s1 = str.replace("ab", "xx");
System.out.println("s1 = " + s1);//s1 = xxcdxxef
System.out.println("s1 = " + s1);

1.6 案列

1.6.1 检验邮箱地址是否正确

要求:从键盘接收一个email地址,对email地址判断是否是正确的邮箱地址,要求:
1.要求必须有@ 2.只能有一个@ 3.必须有点 . 4.点不能挨着@ 5.点不能是最后一位

思路:
有且只有一个@:找出@的第一个出现的位置和最后出现的位置,比较两者是否相等。
点不能挨着@:点的位置 > @的位置+1
点不能是最后一位:点的位置 < 字符串的长度-1

public class checkEmail {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while (true){
            System.out.println("请输入email地址:");
            String email=scanner.next();
            boolean b=check(email);
            if(b){
                System.out.println("有效的email地址");
                break;
            }else {
                System.out.println("无效的email地址");
            }
        }

    }
//有且只有一个@:找出@的第一个出现的位置和最后出现的位置,比较两者是否相等。
//点不能挨着@:点的位置 > @的位置+1
//点不能是最后一位:点的位置 < 字符串的长度-1
    public static boolean check(String string){
        int a = string.indexOf("@");//@的第一个出现的位置
        int b = string.lastIndexOf("@");//@最后出现的位置
        int c = string.indexOf(".");//点出现的位置
        return a!=-1 && a==b && c>a+1 && c<string.length()-1;
    }
}

1.6.2 比较验证码

生成从a~z A~Z 0~9之间,获取4个值作为一个验证码,从键盘接收一个验证码,做不区分大小写比较。

public class CheckCode {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入验证码的长度:");
        int length=scanner.nextInt();
        String code=getCode(length);//自动生成的验证码
        System.out.println(code);
        System.out.println("请输入验证码:");
        String code1=scanner.next();//从键盘接收的验证码
       
        System.out.println(code.equalsIgnoreCase(code1)?"验证码正确":"验证码错误");
    }
    /**
     * 生成从a~z A~Z 0~9之间,获取4个值作为一个验证码
     * @param length  验证码的长度
     * @return        返回验证码
     */
    public static String getCode(int length){
        String z="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        String code="";//最后生成的验证码
        for(int i=1;i<=length;i++){
            int x=(int)(Math.random()*z.length());//生成随机数([0~字符串的长度)),此随机数作为验证码字符的下标位置
            code=code+z.charAt(x);//获取到的字符连接在一起
        }
        return code;
    }
}

你可能感兴趣的:(#,Java基础,java,开发语言)