字符串类型

目录

一、字符与字符串

二、字符串对象与自变量

三、正则表达式

1.普通字符

2.特殊字符

3.非打印字符

4.限定符

5.定位符

四、正则表达式的处理

1.Pattern.compile(String regex)

2.Matcher.matches()

3.Matcher.find()

4.Matcher.replaceAll(String replacement)

五、字符串的连接

六、字符串的比较

七、字符串的长度


一、字符与字符串

字符类型(char)是Java中的基本数据类型之一,字符是用单引号引起来的单个字符。字符串是用双引号引起来的任意个字符,字符串就是字符组成的序列。

package characterString;

import java.util.Random;

public class Password {
    public static void main(String[] args) {
        /*
        随机生成一个6位密码,要求:
        不包含重复字符
        要有字母和数字
        不能以数字开头
         */

            String pass = rand(6);
            System.out.println(pass);

    }
    public static String rand(int length) {
        String characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        String[] arr = characters.split("");

        Random random = new Random();
        // 第一个是字母
        int index = random.nextInt(52);
        StringBuilder sb = new StringBuilder(arr[index]);

        boolean hasNum = false; // 是否有数字
        for (int i = 1; i < length; ) {
            // 随机字符下标
            index = random.nextInt(arr.length);
            // 判断在字符串中有没有
            if (sb.indexOf(arr[index]) == -1) {
                if (index >= 52 ){
                    hasNum = true;
                }
                sb.append(arr[index]);
                i++;
            }
        }

//        String reg = "^[a-zA-Z]+\\d+\\w*$";
        String str = sb.toString();

        if (!hasNum){
            // 说明没数字
            int num = random.nextInt(10);
            int repIndex = random.nextInt(1,length) ;
            str = str.replaceFirst(str.charAt(repIndex) + "", String.valueOf(num));
        }
        return str;
    }
}

二、字符串对象与自变量

字符串的声明有两种形式:

String 变量名="初始值";

String 变量名=new String("初始值");

第一种形式叫字面量,第二种使用new关键字声明的字符串叫做字符串对象。 

三、正则表达式

一种字符串处理的工具,用于查找、替换、匹配和提取文本中的模式。

正则表达式有一些特殊字符和普通字符组成,例如:\d{3}-\d{4}可以匹配“123-4567”的字符串,\d表示数字字符,{3}表示连续匹配3次,-表示匹配一个横线。

1.普通字符
[abc]匹配[]中的所有字符,例如[aeiou]匹配字符串“google runoob taobao”中所有的a e i o u字母
[^ABC]匹配除了[]中所有的字母,例如[^aeiou]匹配字符串“google runoob taobao”中除了a e i o u所有的字母
[^a-z]匹配除了[]以外的字符
[A-Z]表示一个区间,匹配所有大写字母,[a-z]表示所有小写字母
.匹配任意单个字符,但不包括换行符,相等于[^\n\r]

[\s\S]

匹配所有,\s是匹配所有空白符,包括换行,\S非空白符,不包括换行
\w匹配数字、字母、下划线,等价于[A-Za-z0-9]
2.特殊字符

要匹配特殊字符,必须首先使字符“转义”,即,将反斜杠字符\放在它们的前面。

$匹配输入字符串的结束位置。
()标记一个子表达式的开始和结束位置。要匹配这些字符,请使用\(和\)
*匹配前面的子表达式0次或多次。要匹配这些字符,请使用\*
+匹配前面的子表达式1次或多次。要匹配这些字符,请使用\+
.匹配除换行符之外的任意单字符。\.
[标记一个中括号表达式的开始。\[
?匹配前面的子表达式0次或1次。\?
\将下一个字符标记为特殊字符,或原义字符、或向后引用、或八进制转义符。
^匹配输入字符串的开始位置,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。\^
{标记限定符表达式的开始。\{
|指明两项之间的一个选择。\|
3.非打印字符
\cx匹配由x指明的控制字符。x的值必须是A-Z或a-z之一,否则将视作一个原义的'c'字符
\f匹配一个换页符。
\n匹配一个换行符
\r匹配一个回车符
\s匹配任何空白字符,包括空格、制表符、换页符等等
\S匹配任何非空白字符
\t匹配一个制表符
\v匹配一个垂直制表符
4.限定符
*匹配0个或多个字符a,例如ab*能匹配“a”以及“abb”。
+匹配前面的表达式1次或多次
匹配前面的表达式0次或1次
{n}n是一个非负整数,匹配确定的n次
{n,}n是一个非负整数,至少匹配n次
{n,m}m和n均为非负整数,n<=m,最少匹配n次且最多匹配m次
5.定位符
^匹配输入字符串开始的位置
$匹配输入字符串结尾的位置
\b匹配一个单词边界,即字与空格间的位置
\B非单词边界匹配

四、正则表达式的处理

1.Pattern.compile(String regex)

将正则表达式编译成一个Pattern对象,regex是一个字符串类型的正则表达式。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {

    public static void main(String[] args) {
        String regex="\\d+";//匹配数字
        Pattern pattern=Pattern.compile(regex);
        String text="hello 123 world";
        Matcher matcher=pattern.matcher(text);
        while (matcher.find()){
            System.out.println(text+"匹配的结果是:"+matcher.group());
        }
    }

}

  

2.Matcher.matches()

用于判断给定字符串是否与正则表达式匹配,返回一个布尔值。

3.Matcher.find()

用于在给定字符串中查找匹配正则表达式的子序列,返回一个布尔值,如果找到,则使用group方法获取匹配的子序列。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {

    public static void main(String[] args) {
        Pattern pattern=Pattern.compile("\\d\\d\\d");
        Matcher matcher=pattern.matcher("a123b");
        System.out.println(matcher.find());//输出结果true
    }

}
4.Matcher.replaceAll(String replacement)

用于在给定正则表达式中替换正则表达式的子序列,replacement是一个字符串类型的替换字符串。

五、字符串的连接

字符串可以进行加法运算,作用是将两个字符串连接到一起,也可以将字符串与基本数据类型变量做加法运算,系统会先将基本数据类型转换成字符串型后进行连接操作。

将两个字符串连接到一起可以用加号连接,也可以使用concat()方法连接。

public class Main {

    public static void main(String[] args) {
        String firstName="李";
        String lastName="逵";
        String fullName=firstName+lastName;
        System.out.println("姓名是:"+fullName);//姓名是:李逵
    }

}
public class Main {

    public static void main(String[] args) {
        String firstName="李";
        String lastName="逵";
        String fullName=firstName.concat(lastName);
        System.out.println("姓名是:"+fullName);//姓名是:李逵
    }

}

六、字符串的比较

字符串进行比较时不能直接用“==”运算符,而是要使用equals()方法进行比较。

重要提示:

equals都是用于比较两个对象的操作:

①==操作符用于比较两个对象的引用是否指向同一内存地址。

②equals()方法用于比较两个对象的值是否相等。默认情况下,equals()方法比较两个对象的引用是否相等,但可以通过重写该方法来实现自定义的相等比较逻辑。

③对于基本数据类型,==操作符比较的是它们的值。

七、字符串的长度

String类的length()方法可以获取字符串是由多少个字符组成的。

package structure;

import java.util.Scanner;

public class AA {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入用户名:");
        String name=sc.next();
        if (name.length()>=6&&name.length()<=20){
            System.out.println("用户名长度合法");
        }else {
            System.out.println("用户名长度不合法");
        }
    }

}

在数组中length属于数组的属性,在字符串中length()是字符串的方法。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樱桃桃桃桃桃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值