String&StringBuilder&StringBuffer
本文最后更新于 623 天前,其中的信息可能已经有所发展或是发生改变。

1.String,Builder,Buffer

(1).String类

● String类的基础知识

(1)直接赋值

 String str="abc";

(2) 利用构造函数初始化字符串对象

 String str=new String("abc");

(3) String常用方法如表

方法声明 方法描述
int indexOf(String str) 返回指定字符串str在此字符串中第一次出现的索引
int lastIndexOf(String str) 返回指定字符串str在此字符串中最后一次出现的索引
char charAt(int index) 返回字符串中在index位置上的字符,index[ 0 ~ 字符串长度-1 ]
int length() 返回字符串长度
boolean equals(Object anObject) 将此字符串与指定字符串比较
boolean isEmpty() 判断字符串是否为空
boolean startsWith(String prefix) 判断此字符串是否以指定字符串prefix开始的

方法声明 方法描述
String toLowerCase()/String toUpperCase 将字符串所有字符转成小写/大写
String replace(CharSequence oldstr,CharSequence newstr) 将此字符串中的字符串old 用new代替
String [] split(String regex) 根据参数regex将字符串分割为若干个子字符串组成的数组
String substring(int beginIndex) 从索引处beginIndex 处开始截取字符串
String substring(int beginIndex,int endIndex) 截取字符串,从索引beginIndex 处开始到索引endIndex-1为止
String trim() 去除字符串首尾空格
char arr[]=String.toCharArrays() 将字符串变为字符数组装起来
Boolean a=str1.equalsIgnoreCase(str2); 忽略大小写比较大小

●String类代码演示

(1)equals和==

== 比较符号两边的数值

*基本数据类型:比较的是基本数据类型的值是否相同(true/false) *

*引用数据类型:比较的是引用数据类型的地址值是否相同(true/false)

        
String a="123";
        String A=new String("123");
        
        //字符串的比较,用==进行比较
       
  System.out.println(str1==str2);//------ false
         //基本数据类型;比的是数据值
         //引用数据类型:比的是地址值

原因:因为是两个不同方式的赋值 —–构造方法创建的字符串对象是在堆内存 —

———- 直接赋值方式创建的对象是在方法区的常量池;

equals()方法

       
  boolean result1=str1.equals(str2);//比较字符串里面的类容,比较常用---true
         boolean result2=str1.equalsIgnoreCase(str2);//忽略大小写比较 -----true
★ 字符串比较的应用

 import java.util.Scanner;
 
 public class String2 {
     public static void main(String[] args) {
         //该程序是完成用户登陆关于字符串比较的知识点
         //正确的用户名和密码
         String username = "许扬威";
         String password = "520520";
         //键盘录入
         Scanner sc = new Scanner(System.in);
         for (int i = 0; i <3; i++) {
 
 
             System.out.println("请输入用户名:");
             String username1 = sc.next();
             System.out.println("请输入密码:");
             String password1 = sc.next();
             if (username.equals(username1) && password.equals(password1)) {
                 System.out.println("登陆成功!");
                 break;
             } else
                 if(i==2){
                 System.out.println("用户名或密码输入错误三次,已被锁定!");
         }
                 else System.out.println("用户名和密码输入错误,你还有"+(2-i)+"次机会");
         }
     }
 }
 

(2)chatAt
 import java.util.Scanner;
 
 public class String3 {
     public static void main(String[] args) {
         //求字符串长度
         //数组长度直接.length
         //字符串.length(),是一个方法
         //public char charAt(int index)//根据索引返回字符
         //public int length返回字符串长度
         //练习,输入一串字符串,统计大写字母个数,小写字母个数,数字个数
         Scanner sc=new Scanner(System.in);
         System.out.println("请输入一串字符串:");
         String str=sc.next();
         int bigCount=0;
         int smallCount=0;
         int numberCount=0;
         for (int i = 0; i < str.length(); i++) {
             char c=str.charAt(i);
             if(c>='a'&&c<='z')
                 smallCount++;
             if(c>='A'&&c<='Z')
                 bigCount++;
             if(c>='0'&&c<='9')
                 numberCount++;
        }
         System.out.println(bigCount);
         System.out.println(smallCount);
         System.out.println(numberCount);
    }
 }

(3) e反转和拼接

import java.util.Scanner;
 
 public class String4 {
     public static void main(String[] args) {
         //字符串的拼接和反转
         char arr[]={'a','c','d'};
         System.out.println(CharToString(arr));
    }
     public static String CharToString(char arr[]){
           String result="[";
         for (int i = 0; i < arr.length; i++) {
             if(arr==null)
                 return "";
             if(arr.length==0)
                 return "[]";
             if(i==arr.length-1)
                 result=result+arr[i];
             else
             result=result+arr[i]+",";
        }
         result=result+"]";
         return result;
 
    }
 }//-------[a,c,d]
 //字符串的反转相当于遍历时从最后一个字符开始循环遍历
 
 
 
         //字符串的拼接
         String str1="许";
         str1=str1+"扬";
         str1=str1+"威";//拼接直接相加即可
         System.out.println(str1);

(4) split拆分
 String s="离离原上草,一岁一枯荣,野火烧不尽,春风吹又生";
        String [] S=s.split(",");//将字符串用,拆分成字符串数组
        for(String x:S){
            System.out.println(x);//用x接受,当然也要用x打印
        }
(5)常用方法
        
  //字符串常规操作
        String str="abcdefg";
        //打印字符串cd在str中第一次出现的位置
        System.out.println(str.indexOf("cd"));//---------2
        //打印字符串ef在str中最后一次出现的位置
        System.out.println(str.lastIndexOf("ef"));-------4
        //打印字符串str在索引3的位置
        System.out.println(str.charAt(3));---------------d
        //打印字符串str长度
        System.out.println(str.length());//求长度---------7
        //判断字符串str与“abce”是否相等
        System.out.println(str.equals("abce"));---------false
        //判断字符串str是否为空
        System.out.println(str.isEmpty());-------------false
        //判断字符串str是否是以字符串ab开始的
        System.out.println(str.startsWith("ab"));------true
        //判断字符串str当中是否含有“bcd”;
        System.out.println(str.contains("bcd"));-------true
        //小写
        System.out.println(str.toLowerCase());---------abcdefg
        //大写
        System.out.println(str.toUpperCase());---------ABCDEFG
        //将字符串str当中ab替换成“xy”;
        System.out.println(str.replace("ab","xy"));----xycdefg
        //从索引2处开始截取字符串str直到结束
        System.out.println(str.substring(2));--------cdefg
        //截取字符串,从索引3处到索引4处结束
        System.out.println(str.substring(3,5));-----------de

(6)金额转换
 import java.util.Scanner;
 public class String6 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个金额:");
        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;
        }
        System.out.println(moneyStr);//打印一遍刚才获取的值
        //在前面补零
        int count=7-moneyStr.length();
        for (int i = 0; i < count; i++) {
            moneyStr="零"+moneyStr;
        }
        System.out.println(moneyStr);
        //在定义一个数组,存储单位,与数字交叉储存
        String arr[]={"佰","拾","万","仟","佰","拾","元"};
        //遍历,让数字大写和单位交叉储存,两种处理发方式
        String result="";//第二种,也可以用字符串拼接
        for (int i = 0; i <moneyStr.length() ; i++) {
 //           char c=moneyStr.charAt(i);
 //           System.out.print(c);
 //           System.out.print(arr[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];
    }
 }
 //-------------123>>>零佰零拾零万零仟壹佰贰拾叁元

(7)*转换


public class String7 {
    public static void main(String[] args) {
        //该程序完成电话号码中间数组改成*号
        //获取电话号码
 //       String phone="18271736430";
 //       String s=phone.substring(0,3);//获取电话号码前面三位
 //       String d=phone.substring(7);//获取后面几位
 //       String phoneNumber=s+"****"+d;
 //       System.out.println(phoneNumber);
 
 
        //下面程序是根据身份证号对出生年月日性别信息进行读取
        //获取手机号
          String id="564158200001014561";
          String year=id.substring(6,10);
          String month=id.substring(10,12);
          String day=id.substring(12,14);
          char sex=id.charAt(16);//获取代表性别的字符
        int num=sex-48;
        String S;
        if(num%2==0)
            S="女";
        else
            S="男";
        System.out.println("该人的信息为:");
        System.out.println("出身日期"+year+"年"+month+"月"+day+"日"+"性别为:"+S);
 
    }
 }
 

(2)StringBuilder类

●StringBuilder基础知识

StringBuilder可以看成是一个容器,创建之后里面的内容是可以变的;

作用:提高字符串的操作效率

\textcolor{red}{ **注意:**}

因为使用StringBuilder定义的字符串是可变的,所以对它进行添加,修改,删除都不会重新

生成新的StringBuilder对象,因此对于要经常进行修改操作的字符串用StringBuilder比String 效率高

\textcolor{green}{小技巧}

StringBuilder类线程是不安全的,还有一个类StringBuffer,它们两个类方法是一样的,它的线程是安全的,所以在要求线程安全的情况下,需要使用StringBuffer类,因为线程是安全的,所以效率想相对较低。

方法声明 方法解释
public StringBuilder append(任意类型) 添加数据,并返回对象本身
public StringBuilder reverse() 反转容器当中的内容

●代码演示

1.append()

  StringBuilder sb=new StringBuilder("aaa");
         String a="aaa";
         sb.append(a).append(a).append(a);//无限套娃
         System.out.println(sb);//因为java在底层对这个类进行了一些处理,打印出来不是地址值而是属性值//------aaaaaaaaaaaa

2.reverse()—-反转字符串内容

  System.out.println(s.reverse());//反转字符串内容-----abcd>>>dcba

3.利用toStringf方法改成String类型

 StringBuilder w=new StringBuilder("aaa");
 String q=w.toString();//利用toString方法改成字符串
 System.out.println(q);//------aaa

●补充

StringJoiner类测试

 StringJoiner s1=new StringJoiner(",","[","]");
 s1.add("aaa").add("bbb").add("ccc");
 System.out.println(s1);//----[aaa,bbb,ccc]

StringJoiner的概述:

跟StringBuilder一样,可以看作是一个容器,创建之后容器是可变的 ​ 构造方法;public StringJoiner(间隔符号)—指定拼接的间隔符号 ​ public StringJoiner(间隔符号,开始符号,结尾符号)

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇