JAVA---字符串类String,StringBuilder,StringBuffer

    1. 包装类 null

    int  VS Integer?
    int: 基本  默认值 0
    Integer: 引用   null  类有成员
       
       都是代表整型的数据。相互转换。----> 自动装箱(valueOf())和拆箱(***Value())
    有哪几个包装类型 里面有整数缓存池?
       Byte  Short  Integer  Long   Character  0-127
    好处: 创建一次对象    -128-127    
    String 转  int
     Integer.parseInt()
     Long.parseLong(String numStr)  

     

    1. 一定要重写equlas和hashcode

    1. super.clone() 实现Cloneable 默认浅克隆 (引用类型: 内存地址值) 深克隆/序列化流

    1. GC可以回收哪些引用?

    1. 创建Class类对象的3种方式: 对象.getClass() 类名.class; Class.forName()

     

    字符串类

    1. String

    字符序列。 值不可变。private final char value[];
    public final class String  extends Object implements Serializable, Comparable<String>, CharSequence      

    1.1 常用构造:

    解码/解密: 将看不懂字节数据转换成看的懂字符串  
    byte[] bytes = {97,98,99};

    String(byte[] bytes) 将字节数组元素转换成平台默认编码格式的字符串对象
    String(byte[] bytes, Charset charset)     将字节数组元素转换成指定编码格式的字符串对象
    String(byte[] bytes, String charsetName)  
    String(byte[] bytes, int offset, int length)    offset: 字节数组的索引   length: 指定个数

    String(char[] value)  将一个字符数组的数据转换成字符串对象
    String(char[] value, int offset, int count)    
       
    String(String original)    
    private static void demo1() {
           //创建字符串对象
           String str1 = "hello";
           String str2 = new String("hello");

           byte[] bytes = {97, 98, 99};
           String str3 = new String(bytes);//转换成当前平台默认编码格式下的字符串数据

           System.out.println("str3:" + str3);
           //获得平台的编码格式java.nio.Charset
           System.out.println(Charset.defaultCharset());//UTF-8
           //utf-8: 字母/数字: 1byte   汉字: 3个字节
           //GBK: 字母/数字: 1byte 汉字: 2个字节

           try {
               String str4 = new String(bytes, "GBK");
               System.out.println("str4:" + str4);
          } catch (UnsupportedEncodingException e) {
               e.printStackTrace();
          }
           System.out.println("----------------------------");

           String s = "鸡你太美";
           byte[] bytes1 = s.getBytes();
           System.out.println(Arrays.toString(bytes1));

           //将byte1进行解码
    //       String s1 = null;
    //       try {
    //           s1 = new String(bytes1,"GBK");
    //       } catch (UnsupportedEncodingException e) {
    //           e.printStackTrace();
    //       }
           String s1 = new String(bytes1, Charset.forName("UTF-8"));
           System.out.println(s1);//灏氶┈鏁欒偛 乱码: 编码和解码不一致


           char[] chars = {'a',97,'好'};
           String s2 = new String(chars,0,2);
           System.out.println(s2);
      }

     

    ==1.2 常用方法==

    1. 与数组相关

    编码/加密:
     将看的懂的数据转换成看不懂的内容。
    byte[] getBytes()  将指定字符串数据转换成平台默认的编码格式下的字节内容
    byte[] getBytes(Charset charset)
    byte[] getBytes(String charsetName)    
             
    char[] toCharArray() 将字符串转换字符数组  
         
    String[] split(String regex)  利用指定regex分割原字符串
    String[] split(String regex, int limit)      
    private static void demo2() {
           String numStr = "123";
           //获得字符串里面每个字符数据
           char[] chars = numStr.toCharArray();
           for (char aChar : chars) {
               System.out.println(aChar);
               int num = Character.digit(aChar, 10);
          }
      }

    split

    private static void demo3() {
           //假设已经获得了文件中用户信息
           //id-name-pass-age
           String userInfoStr = "1001-admin-1111-20";
           String[] split = userInfoStr.split("-");
           System.out.println(Arrays.toString(split));

           UserInfo userInfo = new UserInfo();
           userInfo.setId(Integer.parseInt(split[0]));
           userInfo.setName(split[1]);
           userInfo.setPass(split[2]);
           userInfo.setAge(Integer.parseInt(split[3]));

           System.out.println(userInfo);
      }

     

      private static void demo4() {

           String string = "abacdaa";
           //使用a进行分割
           String[] split = string.split("a", -1);
           System.out.println(Arrays.toString(split));//3 [, b, cd]   应该是4个
           //limit: 限定   limit=0 最后的元素为空 会舍掉   len最多的元素个数
           //limit<=len 限定数组元素个数
           //limit>len len个元素个数
           //limit<0 len个元素个数
      }

     

    2. 检索

    char charAt(int index) ---->parseInt()  获得指定索引处的字符数据  0-length()-1;
       
    int indexOf(String str)  ---->获得字符串第一次出现的索引位置  -1
    int indexOf(String str, int fromIndex)  
       ---> 从指定的索引处 获得字符串第一次出现的索引位置  
       
    int lastIndexOf(String str)
    int lastIndexOf(String str, int fromIndex)      

     

    charAt()

    private static void demo5() {
           //String str = new String("hello");
           //ctrl+alt+ <- 回退一步

           String str = "hello";
           // System.out.println(str.length());
           int length = str.length();
           for (int index = 0; index < length; index++) {
               System.out.println(str.charAt(index));
          }
      }

    indexOf()

    private static void demo6() {
           String str = "hellohe";

    //       //找第一次
    //       int firstIndex = str.indexOf("he",0);
    //       System.out.println(firstIndex);
    //
    //       //找第二次
    //       System.out.println(str.indexOf("he", firstIndex+2));

           //循环遍历查找
           int fromIndex = 0;
           while (true) {
               int index = str.indexOf("he", fromIndex);
               if (index == -1) {
                   break;
              }
               System.out.println("he出现的索引位置:" + index);
               fromIndex = index;
               fromIndex += 2;
          }
      }

    lastIndexOf

      private static void demo7() {
           String str = "hellohe";
           //System.out.println(str.lastIndexOf("heabc"));
           System.out.println(str.lastIndexOf("he", 3));//0 hel l ohe
      }

     

     

    3. 截取

    String substring(int beginIndex)  
    String substring(int beginIndex, int endIndex)      
    //模拟文件上传
       private static void demo9(String filePath) {

           //存储到目标文件里面
           //获得源文件的名称
    //       String[] split = filePath.split("\\\\");
    //       System.out.println(Arrays.toString(split));
    //       String fileName = split[split.length - 1];
    //       System.out.println(fileName);

           System.out.println("---------------------------");
           String targetName = filePath.substring(filePath.lastIndexOf("\\") + 1);

           //保证目标文件名称唯一性
           //1. 时间戳--->获得当前时间毫秒数/纳秒数
    //       targetName = System.currentTimeMillis() + "_" + targetName;
    //       System.out.println(targetName);
           //2. 随机的java.uti.UUID
           targetName = UUID.randomUUID().toString() + "_" + targetName;
           System.out.println(targetName);
      }
    private static void demo11() {
           String phone = "18976533553";//189****3553
           //System.out.println(phone.replaceAll(phone, "189****3553")); 正则

           //手机号码: 11
           String first = phone.substring(0, 3);
           String end = phone.substring(7);
           System.out.println(first + "****" + end);
      }

     

     

    4. 替换

    String replace(char oldChar, char newChar)  
    String replaceAll(String regex, String replacement)  
       
    String replaceFirst(String regex, String replacement)      

     

    private static void demo10() {
           String fileName = UUID.randomUUID().toString();
           System.out.println(fileName.replace('-', '\u0000'));
           fileName = fileName.replaceAll("-", "");
           System.out.println(fileName + "-" + "a.jpg");
      }

     

     

    5. 比较判断

    boolean equals(Object anObject)  
    boolean equalsIgnoreCase(String anotherString)  
       
    int compareTo(String anotherString)  
    int compareToIgnoreCase(String str)      
    boolean isEmpty()        
       
       
    boolean contains(CharSequence s)
    boolean startsWith(String prefix)      
    boolean endsWith(String suffix)      

     

     

    6. 大小写转换

    String toLowerCase()  
    String toUpperCase()      

     

     

    7. 拼接

    String concat(String str)  
    static String join(CharSequence delimiter, CharSequence... elements)      
    private static void demo14() {
           String str = "hello";
           String concat = str.concat(",world");

           System.out.println(str);
           System.out.println(concat);

           System.out.println("=============================");
           String str1 = "hello";
           String str2 = str1 + ",world";//StringBuilder.append()
           System.out.println(str2);
           System.out.println(concat == str2);

           String name = "jim";
           String pass = "1234";
           int age = 20;
           //1001-admin-111-20
           String info = name + "-" + pass + "-" + age;
           System.out.println(info);

           System.out.println(String.join("-", name, pass, String.valueOf(age)));
      }

     

     

     

    8. 其它

    int length() 
    String trim()  
    static String valueOf(int i)  
    String intern()      
     private static void demo16() {
           String s = new String("hello");
           String s1 = new String("hello");
           System.out.println(s == s1);
           System.out.println(s.intern() == s1.intern());

      }

     

    1.3 正则表达式

    在String类里面  有几个方法是支持正则表达式的:
    一般都是用来匹配  校验  以及替换。
    boolean matches(String regex) 判断字符串是否符合正则标砖
         
    String replaceAll(String regex, String replacement)      
    String replaceFirst(String regex, String replacement)
         
    String[] split(String regex)
    正则基本语法:
    https://tool.oschina.net/uploads/apidocs/jquery/regexp.html
    String regex = "^([]{})([]{})([]{})$";
    ^:***开头
    $:***结尾
    (): /域段 (替换功能) \n代表的第n个小括号里面的内容   $n : $1获得第n个小括号里面的内容(替换内容)
    []: 具体的字符内容
    {}: 限定[]里面数据出现的次数 [a]{3,9}    
    */+/?匹配内容出现1+
    .: 匹配任意单字符
    \d: [0-9]
    \s: 匹配任意空白字符
    \w: [A-Za-z0-9_]    

     

     

    校验用户名是否合法

     private static void testUserName() {

           String username = "Admin#123";

           //用户名第一个为大写字母(1个) A-Z
           //可以大写/小写字母/数字 (3-5)
           //- _#(1个)
           //小写字母/数字(2-4)
           String usernameRegex = "^[A-Z][a-zA-Z\\d]{3,5}[-_#][a-z\\d]{2,4}$";

           //Pattern: 表示的正则
          /* Pattern pattern = Pattern.compile(usernameRegex);
           Matcher matcher = pattern.matcher(username);
           boolean flag = matcher.matches();
           System.out.println(flag);*/

           System.out.println(username.matches(usernameRegex));

      }

     

    手机号码

    private static void testPhone() {

           String phone = "15234567890";

           String phoneRegex = "(\\d{3})(\\d{4})(\\d{4})";

           //需要使用原字符串的部分数据 替换本身
           //动态获得第一个()和第三个()数据
           System.out.println(phone.replaceAll(phoneRegex, "$1****$3"));
      }

     

    去重

     private static void testStrRegex() {
           String str = "adggd1118911好哈哈哈哈好aaa";
           char[] chars = str.toCharArray();
           Arrays.sort(chars);
           str = new String(chars);
           System.out.println("str:" + str);

           //1111189aaaaddgg哈哈哈哈好好
           //将原字符串里面 出现>=1字符使用(1个自己)替换

           String regex = "(.)\\1+";
           System.out.println(str.replaceAll(regex, "$1"));
      }

       private static void testStr() {

           String str = "1111189aaaaddgg哈哈哈哈好好";

           //去除字符串里面重复字符数据
           int length = str.length();

           //临时数组变量: 存储唯一的字符
           char[] chars = new char[length];

           int i = 0;
           for (int index = 0; index < length; index++) {
               char charAt = str.charAt(index);
               boolean flag = false;
               for (char aChar : chars) {
                   if (aChar == charAt) {
                       flag = true;
                       break;
                  }
              }
               if (!flag) {
                   chars[i++] = charAt;
              }
          }

           String result = new String(Arrays.copyOf(chars, i));
           System.out.println(result);

      }

     

     

    2. StringBuffer/Builder

    api功能 一模一样。

     


    线程不安全的类绝对不能充当成员变量

    常用构造:
     StringBuilder()

     

    常用方法:
    StringBuilder append(String str)  
    StringBuilder delete(int start, int end)  
    StringBuilder deleteCharAt(int index)
    void setCharAt(int index, char ch)  
    StringBuilder replace(int start, int end, String str)      
    StringBuilder reverse()      
     public static void main(String[] args) {

    //count 统计字符个数
    //value[]--->缓冲 value.length 与 count
    StringBuilder builder = new StringBuilder();//初始化容量为16
    builder.append("hello");
    //builder.insert(0,"123");

    //删除最后一个l
    //builder.deleteCharAt(builder.lastIndexOf("l"));
    //builder.delete(0, 3);
    //builder.setCharAt(builder.indexOf("l"),'a');
    //int index = builder.indexOf("l");
    //builder.replace(index,index+1,"abc");

    builder.reverse();

    System.out.println(builder);
    }
     

     

     

     

     

     

     

     

     

     

     

     

     

posted @   学JAVA的旅行者  阅读(97)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示