J字符串(equals、compareTo、charAt、substring、replace、StringBuilder(append、reverse、insert、length、toString))

本文介绍了Java中的字符串特性,包括String类的不可变性,字符串池的概念,以及如何通过new创建对象。此外,讨论了如何比较字符串、遍历字符串以及如何反转和转换字符串,如将阿拉伯数字变为中文大写。还涉及到了字符串的截取和敏感词的替换,以及StringBuilder类的应用。
摘要由CSDN通过智能技术生成

字符串的内容是不会发生改变的,它的对象在创建后不能被更改。

String是Java定义好的一个类。定义在Java.lang包中,所以使用的时候不需要导包。

Java程序中的所有字符串文字(例如”abcdefg“),都被实为此类的对象。

在JDK7之前,串池是在方法区内的,在JDK7后,串池存放在堆内存中。

 例如下面的一段代码:

public class Test{
    public static void main(String[] args){
        String s1="abc";
        String s2="abc";
    }
}

在s1创建对象时,程序会先观察串池中是否有字符串abc,如果没有就创建,所以程序会在串池中创建abc。

在s2创建对象时,程序会先观察串池中是否有字符串abc,如果没有就创建,因为s1已经在串池中创建了abc,所以此时串池中是有abc的,所以s2就不再创建新的字符串。

所以上面的程序中s1和s2是指向同一块区域的。

而通过new出来的字符串和上面的情况一样吗?

public class Test{
    public static void main(String[] args){
        char[] s1={'a','b','c'};
        String s2=new String(s1);
        String s3=new String(s1);
    }
}

首先,创建字符数组,字符‘a’、‘b’、‘c’会在堆内存中存储,s1获得字符的地址

s2由于是new出来的,因此程序会在堆内存中新创建一个内存,s2获得字符串"abc"的地址。

s3由于是new出来的,因此程序会在堆内存中新创建一个内存,s3获得字符串"abc"的地址。

因此s2和s3指向的是不同的字符串"abc"。

那么如何比较字符串呢?

          compareTo可以用于比较两个字符串的AScii码值,因此可以用于Lambda表达式的返回值。                                            

 那么如何遍历字符串呢?

a  b  c  d  e

0  1  2  3  4 

那么字符串如何反转呢?我们可以选择倒着遍历字符串

public class Test{
    public static void main(String[] args){
        String s1="abc";
        String result=reverse(s1);
        System.out.println(result);
    }






    public static String reverse(String str){
        String result="";
        for(int i=str.length()-1;i>=0;i--){    //将字符串倒着遍历,取出每个字符,将它们拼接起来
            char c=str.charAt(i);
            result=result+c;
        }
        return result;
    }
}

那么如何把字符串由阿拉伯数字变成中文的大写呢?eg:123 ->零百零拾零万零千壹百二拾叁元

我们可以利用查表法

public class Test{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int money;
        while(true){
            money=sc.nextInt();
            if(money>=0&&money<=9999999){
                break;
            }else{
                 System.out.println("金额无效");
            }
        }
        String moneyStr="";
        while(true){
            int ge=money%10;
            String capitalNumber=getCapitalNumber(ge);
            moneyStr=capitalNumber+moneystr;
            money=money/10;
            if(money==0){
                break;
            }
        }
        int count=7-moneyStr.length();
        for(int i=0;i<count;i++){
            moneyStr="零"+moneyStr;
        }
        String result="";
        String[] arr={"佰","拾","万","仟","佰","拾","元"};
        for(int i=0;i<moneyStr.length();i++){
            char c=moneyStr.charAt(i);
            result=result+c+arr[i];
        }
        System.out.println(result);
    }






    public static String getCapitalNumber(int number){
        String[] arr={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
        return arr[number];
    }
}

字符串截取

                                                                  手机号隐藏

public class Test{
    public static void main(String[] args){
        String phoneNumber="13177889911";
        String start=phoneNumber.substring(0,3);
        String end=phoneNumber.substring(7);
        String result=start+"****"+end;
        System.out.println(result);
    }
}

                                                                  敏感词替换 

public class Test{
    public static void main(String[] args){
        String talk="你玩的真好,下次别玩了,TMD,MLGB,CNM";
        //定义一个敏感词库
        String[] sensitiveWord={"TMD","MLGB","CNM","SB"};

        for(int i=0;i<sensitiveWord.length;i++){
            talk=talk.replace(sensitiveWord[i],"***");
        }
        System.out.println(talk);
    }
}

StringBuilder的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值