首页 > 其他分享 >27-String类

27-String类

时间:2024-07-02 16:31:32浏览次数:16  
标签:27 String System 字符串 str println out

String

  • 字符串是常量,创建之后不可改变
  • 字符串字面值存储在字符串池中,可以共享
  • String s = "hello"; 产生一个对象,字符串池中存储
  • String s = new String("hello");//产生两个对象,堆、池各存储一个
        String name = "hello";//"hello"常量存储在字符常量池中。name在栈区指向方法区字符串常量池“hello”
        name = "zhangsan";//把zhangsan赋值给name,并不是把hello修改称zhangsan;而是在字符串池创建zhangsan
        //不可变性:给字符串赋值时,并没有修改数据,而是重新开辟空间
        String name2 = "zhangsan";//栈区中的name2指向方法区中字符串常量池的“zhangsan”
        //这样name;name2指向字符串池里的同一个对象“zhangsan”
        //name;name2在栈区是两个地址

        //字符串另一种创建方式
        String str = new String("java");
        //str在栈区,“java”在方法区字符串池,  new String--->堆中创建一个对象“java”
        //str指向堆中的对象,,存的是堆中的“java”的地址
        //但是实际上内存里,堆中的“java”是指向常量池中的“java”,堆中没有“java”(可以理解有);但实际也是有两个对(堆中和常量池)
        String str2 = new String("java");
        System.out.println(str == str2);//false
        System.out.println(str.equals(str2));//true(因为String类重写了equals方法,比较的是内容了)

内存分析

常用方法

  1. length(); 返回字符串长度
  2. charAt(int index); 返回某个位置的字符
  3. contains(String str); 判断是否包含某个字符串
  4. toCharArray(); 将字符串转换成数组
  5. indexOf(String str); 查找str首次出现的下标,存在,则返回该下标;不存在则返回-1
  6. lastIndexOf(String str); 查找字符串在当前字符串中最后一次出现的下标索引
  7. trim(); 去掉字符串前后的空格
  8. toUpperCase(); 将小写转成大写
  9. endWith(String str); 判断字符串是否以str结尾
  10. replace(char oldChar,char newChar); 将旧字符(或字符串)替换成新字符串
  11. split(String str); 根据str做拆分
  12. equals();比较字符串是否相等
  13. compare(); 比较大小(字典表顺序)
        //字符串方法使用
        String content = "java2024";
        System.out.println(content.length());//8
        System.out.println(content.charAt(content.length()-1));//4
        System.out.println(content.contains("java"));//true
        System.out.println(Arrays.toString(content.toCharArray()));//[j, a, v, a, 2, 0, 2, 4]
        System.out.println(content.indexOf("java"));//0
        System.out.println(content.lastIndexOf("2"));//6
        String content2 = "    hello world  ";
        System.out.println(content2.trim());//hello world
        System.out.println(content2.toUpperCase());//    HELLO WORLD (content2还是指向"    hello world  ")
        System.out.println(content2.toLowerCase());//    hello world
        System.out.println(content2.endsWith(" "));//true
        System.out.println(content2.startsWith("hello"));//false
        System.out.println(content.replace("java", "php"));//php2024
        String[] arr = content2.split(" +");//填个加号表示多个空格也拆分
        for (String s : arr) {
            System.out.println(s);
        }
        /*
        hello
        world
         */

案例

  • 需求

    已知String str = ”this is a text“;

    1. 将str的单词单独获取出来
    2. 将str中text替换为practice
    3. 在text前面插入一个easy
    4. 将每个单词的首字母改成大写
        String str = "this is a text";
        //1
        String[] arr = str.split(" ");
        for (String s : arr) {
            System.out.println(s);
        }
        //2
        System.out.println(str.replace("text", "practice"));
        //3
        System.out.println(str.replace("text", "easy text"));
        //4
        for (int i = 0; i < arr.length; i++) {
            char first = arr[i].charAt(0);
            //把第一个字符变大写
            char upperfirst = Character.toUpperCase(first);//Character 是char的包装类

            String news = upperfirst+arr[i].substring(1);//substring();截取
            System.out.println(news);
        }
        /*
        this
        is
        a
        text
        this is a practice
        this is a easy text
        This
        Is
        A
        Text
         */

可变字符串

  • 由于String类的不可变性,运行过程中会产生很多无用字符串,效率上来讲也比较低。

StringBuffer

  • 可变长字符串,JDK1.0提供,运行效率慢(比String高的),线程安全
        StringBuffer sb = new StringBuffer();
        //1 append(); 追加
        sb.append("javaYes");
        System.out.println(sb.toString());//javaYes
        sb.append("javaNo");
        System.out.println(sb.toString());//javaYesjavaNo
        //2 insert(); 添加
        sb.insert(0,"我在最前面");
        System.out.println(sb.toString());//我在最前面javaYesjavaNo
        //3 replace();
        sb.replace(0,5,"hello");//hellojavaYesjavaNo
        System.out.println(sb.toString());
        //4 delete();删除
        sb.delete(0,5);
        System.out.println(sb.toString());//javaYesjavaNo
        //若要清空,则delete(0,sb.lenth());

StringBuilder

  • 可变长字符串,JDK5.0提供,运行效率块,线程不安全

  • 用法与StringBuffer一样,在单线程情况下就用StringBuilder

标签:27,String,System,字符串,str,println,out
From: https://www.cnblogs.com/Mc9r4dy/p/18280089

相关文章

  • Visual C++ generate uuid via UuidCreate and CoCreateGuid,get time now,write stri
    //ConsoleApplication3.cpp:Thisfilecontainsthe'main'function.Programexecutionbeginsandendsthere.//#pragmacomment(lib,"rpcrt4.lib")#include<windows.h>#include<chrono>#include<ctime>#include&l......
  • 【2024-06-27】责任的苦
    20:00人啊,一生啊,包括参加高考也好、考研究生也好,实际上人生的道路非常的漫长,不可能会是一帆风顺的,我希望年轻人把这种不顺利当成一个锻炼自己的机遇,在这个机遇中、这种考验中,成长、长大,不要一下子就丧失了斗志。                    ......
  • 秋招Java后端开发冲刺——基础篇5(String&集合)
    一、StringString类是Java中字符串操作类,位于java.lang包下String类型对象的底层使用字符数组char[]存储字符串,由final修饰且没有提供公共的修改方法,因此String对象是不可变的。常见方法方法名作用trim()去掉字符串首尾空字符split(分隔符/正则表达式)分割字符串substring......
  • 基于java+springboot+vue实现的旅游管理系统(文末源码+Lw)227
    摘 要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本旅游管理系统就是在这样的大环境下诞生,其可以帮助使用者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达......
  • ## BZOJ2720 [Violet 5] 列队春游 题解
    Problem对于一个数列\(S\),\(S_0=\infty\),设对于\(S_i\),\(S_{a_i}\)是\(S_i\)之前第一个大于等于\(S_i\)的数。给定\(S\)中的元素,求\(\sum_{i=1}^{n}(i-a_i)\)的期望。Solution我们考虑对于每一种身高的学生,分别统计期望。显然,对于身高为\(h\)的学生,只有身高为\(......
  • Golang:go-querystring将struct编码为URL查询参数的库
    Golang:go-querystring将struct编码为URL查询参数的库原创 吃个大西瓜 CodingBigTree 2024-05-0908:30 北京go-querystringisaGolibraryforencodingstructsintoURLqueryparameters.译文:go-querystring将struct编码为URL查询参数的Golang库文档ht......
  • swift JSONString和字典互转
     extensionDictionary{publicfunctoJSONString()->String?{guardletdata=try?JSONSerialization.data(withJSONObject:self,options:[])else{returnnil}guardletstring=String(data:data,encoding......
  • 【Effective Python教程】(90个有效方法)笔记——第3章:函数——24:用None和docstring来描
    文章目录第3章:函数第24条用None和docstring来描述默认值会变的参数函数默认值的坑(函数的默认参数值只在定义函数时计算)解决方法:将函数默认参数值设为None,然后再在函数体中判断并初始化函数默认参数值设置为None的其他应用示例“函数默认参数值设置为None”与“函数参数......
  • 阿里227x82y纯算篇
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!目标网站某里验证分析逆向流程今天有星球成员催想看看ali的参数为227开头的站我们先打开某麦登录有......
  • 2713. 矩阵中严格递增的单元格数 Hard
    给你一个下标从 1 开始、大小为 mxn 的整数矩阵 mat,你可以选择任一单元格作为 起始单元格 。从起始单元格出发,你可以移动到 同一行或同一列 中的任何其他单元格,但前提是目标单元格的值 严格大于 当前单元格的值。你可以多次重复这一过程,从一个单元格移动到另一......