java-String

news2025/1/11 17:57:12

String

1. String引入

1.1 构造方法
   public static void main1(String[] args) {//构造方法
        String s1 = "hello world";
        String s2 = new String("yuanwei");
        char[] values ={'a','b','c'};
        String s3= new String(values);

        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
    }

image-20231026084432219

1.2 常见函数调用
    public static void main2(String[] args) {//常见函数调用
        String s1 = "hello world";
        System.out.println(s1.length());//长度,调用的是函数
        int[]array ={1,2,3,4,5};
        System.out.println(array.length);//length是属性

        String s2="";
        System.out.println(s2.isEmpty());//s2这个引用指向的对象是空
        String s3=null;//s3不指向任何对象

        System.out.println("yuanwei".length());//""引起来的常量也是String类,常量也可直接调用函数
    }
1.3 字符串比较
    public static void main3(String[] args) {
        String s1="hello";
        String s2="yuanwei";
        //比较两个引用指向对象内容是否一致.equals是String重写了Object的接口
        System.out.println(s1.equals(s2));//
        System.out.println(s1.equalsIgnoreCase(s2));//忽略大小写

        System.out.println(s1.compareTo(s2));//if s1>s2,返回正数,反之负数,相等返回0

        System.out.println(s1.compareToIgnoreCase(s2));//忽略大小写比较字典序
    }
1.4 字符串查找
    public static void main4(String[] args) {//字符串查找
        String s1="hello";
        //1. charAt()
        System.out.println(s1.charAt(2));
        for (int i = 0; i < s1.length() ;i++) {
            System.out.print(s1.charAt(i));
        }
        System.out.println();
        //2. indexOf
        int index1 = s1.indexOf('l');//返回第一次出现的位置
        System.out.println(index1);
        String s2= "abcdabcdabcd";
        int index2 = s2.indexOf("da");//主串中查找子串位置 KMP算法
        System.out.println(index2);
        //3. lastIndexOf() 从后往前找
        int index3= s2.lastIndexOf("abc");
        System.out.println(index3);
        int index4= s2.lastIndexOf("acbd",9);//end=fromIndex开始往前找
    }
1.5 字符串转换
    public static void main5(String[] args) {//字符串转换
        String s1=String.valueOf(123);//int->String
        String s2 =String .valueOf('c');//char->String
        System.out.println(s1);
        System.out.println(s2);
        String s3= String.valueOf(new Person());//Object->String
        System.out.println(s3);//调用的是Object的toString方法
        System.out.println("===================");
        String s4="123";
        int data=Integer.parseInt(s4);//类名调用的都是静态方法
        System.out.println(s4);
        //基本类型(int) 对应的 类类型(Integer)
        double data2=Double.parseDouble("123.34");
    }
    public static void main6(String[] args) {//大小写转化
        String s1 ="abcd";
        String ps1=s1.toUpperCase();
        System.out.println(ps1);
        String s2="AFSfdas";
        System.out.println(s2.toLowerCase());
    }
1.6 字符串替换
    public static void main(String[] args) {//并不修改原来的值,返回值都是新生成一个对象
        String s1="abcdabcdeacbde";
        String ret1=s1.replace('a', 'y');
        System.out.println(ret1);
        System.out.println("===============");
        String ret2=s1.replace("abc","000");
        System.out.println(ret2);
        System.out.println("===============");
        String ret3=s1.replaceAll("abc","000");
        System.out.println(ret3);
        System.out.println("===============");
        String ret4=s1.replaceFirst("cb","yuan");
        System.out.println(ret4);
    }
1.7 字符串转数组
    public static void main7(String[] args) {//字符串转数组
        String s1 ="abcd";
        char[] array = s1.toCharArray();
        for(int i=0;i<array.length;i++){
            System.out.println(array[i]);
        }
        //格式化输出
        String s=String.format("%d-%d-%d",2001,6,20);
        System.out.println(s);
    }
1.8 字符串拆分
    public static void main(String[] args) {//涉及到多次拆分的情况
        String str1="name=yuanwei&age=22&sex=male";
        String[] strs=str1.split("&");
        for(int i=0;i<strs.length;i++){
            System.out.println(strs[i]);
        }
        //name=yuanwei
        //age=22
        //sex=male
        for(int i=0;i<strs.length;i++){
//            System.out.println(strs[i]);
            String[] strings=strs[i].split("=");
            for(String s:strings){
                System.out.println(s);
            }
        }
        //name
        //yuanwei
        //age
        //22
        //sex
        //male
    }
    public static void main9(String[] args) {//字符串拆分
        String s1= "hello yuanwei hello ahahah";
        String[] array1 = s1.split(" ");//参数是String
        for (int i = 0; i < array1.length; i++) {
            System.out.println(array1[i]);
        }
        //hello
        //yuanwei
        //hello
        //ahahah
        System.out.println("============");
        String[] array2 = s1.split(" ",2);//最多分两组
        for (int i = 0; i < array2.length; i++) {
            System.out.println(array2[i]);
        }
        //hello
        //yuanwei hello ahahah

        String s3="192.168.16.20";
        String[] ret =s3.split("\\.");//特殊字符. | * + 需要进行转义,加上两个\\
        for (int i = 0; i < ret.length; i++) {
            System.out.println(ret[i]);
        }
        //192
        //168
        //16
        //20

        String s4="192\\168\\16\\20";
        String[] ret2 =s4.split("\\\\");
        for (int i = 0; i < ret2.length; i++) {
            System.out.println(ret2[i]);
        }
        //192
        //168
        //16
        //20


        String s5="192&16816=20";
        String[] ret3 =s4.split("&|=");//多个分隔符
        for (int i = 0; i < ret3.length; i++) {
            System.out.println(ret3[i]);
        }
    }
1.9 字符串截取
    public static void main16(String[] args) {//字符串截取,也是返还一个新的对象
        String str="abcdef";
        String s1= str.substring(2);//[beginIndex...]
        System.out.println(s1);
        String s2=str.substring(2,3);//[from,end) 注意所有区间都是左闭右开
        System.out.println(s2);
        //cdef
        //c
    }
    public static void main(String[] args) {//删除左右两边的空格
        String str ="       abcd hello       ";
        String s1=str.trim();
        System.out.println(s1);//abcd hello
    }

2. 字符串不可变性

只要是""引起来的对象,都放在常量值区中,是不可改变的,都会产生新的对象返回.

逻辑上JVM内存划分为java虚拟机栈,本地方法栈,堆,方法区,程序计数器 5个部分,方法区就是堆的一部分.

image-20231026102226405

image-20231026102156625

3. StringBuffer StringBuilder

字符串拼接

+拼接会产生很多的临时对象,导致效率会非常的低.

    public static void main(String[] args) {
        String str="hello";
        StringBuffer stringBuffer =new StringBuffer();//新stringBuffer对象
        stringBuffer.append(str);
        stringBuffer.append("yuanwei");

        str改变引用指向,指向了一个新产生的对象StringBuilder完成拼接,得到helloyuanwei并使用toString()new的新对象
        str= stringBuffer.toString();
        System.out.println(str);//helloyuanwei
    }
    public static void main20(String[] args) {
        String str="hello";//对象1
        str+="yuanwei";//对象2
        System.out.println(str);//对象3->StringBuilder,toString又创建一个String对象,赋值给str
    }

例子演示:

image-20231026112436078

image-20231026112419142

public class String_builder {
    public static void main(String[] args) {
        //在同一个对象上进行修改.\
        //将常量值取出来之后构建一个对象,然后无论怎么操作,都只会在这个对象上操作
        StringBuilder stringBuilder=new StringBuilder("abc");
        System.out.println(stringBuilder);
        stringBuilder.reverse();
        System.out.println(stringBuilder);
        //abc
        //cba

        StringBuilder stringBuilder2=new StringBuilder("abc");
        System.out.println(stringBuilder2);
        stringBuilder2.append(10);
        stringBuilder2.append(10);
        stringBuilder2.append(10);
        System.out.println(stringBuilder2);//abc101010 调用的是stringBuilder2.toString()
    }
}

image-20231026104505234

public class string {
    public boolean isValid(char ch){
        if((ch>='0' && ch<='9') || (ch>='a' && ch<='z')){
            return true;
        }
        return false;
    }
    public boolean isPalindStr(String str){//回文字符串判断
        str.toLowerCase();//忽略大小写
        char[] array = str.toCharArray();
        int left=0,right=array.length-1;
        while (left<right){
            //循环走一定注意双指针相对位置关系
            while(left<right && !isValid(array[left])){
                left++;
            }
            while(left<right && !isValid(array[right])){
                right--;
            }

            if(array[left] != array[right]){
                return false;
            }else{
                left++;
                right--;
            }
        }
        return true;
    }
    //处理连续输入问题
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while(scanner.hasNextLine()){//如果有下一行数据,true
            String str = scanner.nextLine();//读取一行
            //do...
            int index =str.lastIndexOf(" ");
            String ret = str.substring(index+1);
            System.out.println(ret);
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1240790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

看不惯AI版权作品被白嫖!Stability AI副总裁选择了辞职,曾领导开发Stable Audio

近日&#xff0c;OpenAI的各种大瓜真是让人吃麻了。 而就在Sam Altmam被开除前两天&#xff0c;可能没太多人注意到Stability AI副总裁Newton—Rex因看不惯StabilityAI在版权保护上的行为选择辞职一事。 大模型研究测试传送门 GPT-4传送门&#xff08;免墙&#xff0c;可直接…

记录一次因内存不足而导致hiveserver2和namenode进程宕机的排查

背景 最近发现集群主节点总有进程宕机&#xff0c;定位了大半天才找到原因&#xff0c;分享一下 排查过程 查询hiveserver2和namenode日志&#xff0c;都是正常的&#xff0c;突然日志就不记录了&#xff0c;直到我重启之后又恢复工作了。 排查各种日志都是正常的&#xff0…

windows搭建gitlab教程

1.安装gitlab 说明&#xff1a;由于公司都是windows服务器&#xff0c;这里安装以windows为例&#xff0c;先安装一个虚拟机&#xff0c;然后安装一个docker&#xff08;前提条件&#xff09; 1.1搜索镜像 docker search gitlab #搜索所有的docker search gitlab-ce-zh #搜索…

【css】Google第三方登录按钮样式修改

文章目录 场景前置准备修改样式官方属性修改样式CSS修改样式按钮的高度height和border-radiusLogo和文字布局 场景 需要用到谷歌的第三方登录&#xff0c;登录按钮有自己的样式。根据官方文档&#xff1a;概览 | Authentication | Google for Developers&#xff0c;提供两种第…

SPASS-ARIMA模型

基本概念 在预测中,对于平稳的时间序列,可用自回归移动平均(AutoRegres- sive Moving Average, ARMA)模型及特殊情况的自回归(AutoRegressive, AR)模型、移动平均(Moving Average, MA)模型等来拟合,预测该时间序列的未来值,但在实际的经济预测中,随机数据序列往往…

HarmonyOS ArkTS Video组件的使用(七)

概述 在手机、平板或是智慧屏这些终端设备上&#xff0c;媒体功能可以算作是我们最常用的场景之一。无论是实现音频的播放、录制、采集&#xff0c;还是视频的播放、切换、循环&#xff0c;亦或是相机的预览、拍照等功能&#xff0c;媒体组件都是必不可少的。以视频功能为例&a…

6-使用nacos作为注册中心

本文讲解项目中集成nacos&#xff0c;并将nacos作为注册中心使用的过程。本文不涉及nacos的原理。 1、项目简介 以一个演示项目为例&#xff0c;项目包含三个服务&#xff0c;调用及依赖如下图&#xff1a; 由图中可以看出&#xff0c;coupon-customer-serv为服务的消费者&a…

Python基础教程: sorted 函数

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 sorted 可以对所有可迭代的对象进行排序操作&#xff0c; sorted 方法返回的是一个新的 list&#xff0c;而不是在原来的基础上进行的操作。 从新排序列表。 &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程…

9.4 Windows驱动开发:内核PE结构VA与FOA转换

本章将继续探索内核中解析PE文件的相关内容&#xff0c;PE文件中FOA与VA,RVA之间的转换也是很重要的&#xff0c;所谓的FOA是文件中的地址&#xff0c;VA则是内存装入后的虚拟地址&#xff0c;RVA是内存基址与当前地址的相对偏移&#xff0c;本章还是需要用到《内核解析PE结构导…

【论文阅读笔记】Emu Edit: Precise Image Editing via Recognition and Generation Tasks

【论文阅读笔记】Emu Edit: Precise Image Editing via Recognition and Generation Tasks 论文阅读笔记论文信息摘要背景方法结果额外 关键发现作者动机相关工作1. 使用输入和编辑图像的对齐和详细描述来执行特定的编辑2. 另一类图像编辑模型采用输入掩码作为附加输入 。3. 为…

第三节-Android10.0 Binder通信原理(三)-ServiceManager篇

1、概述 在Android中&#xff0c;系统提供的服务被包装成一个个系统级service&#xff0c;这些service往往会在设备启动之时添加进Android系统&#xff0c;当某个应用想要调用系统某个服务的功能时&#xff0c;往往是向系统发出请求&#xff0c;调用该服务的外部接口。在上一节…

Vue批量全局处理undefined和null转为““ 空字符串

我们在处理后台返回的信息&#xff0c;有的时候返回的是undefined或者null&#xff0c;这种字符串容易引起用户的误解&#xff0c;所以需要我们把这些字符串处理一下。 如果每个页面都单独处理&#xff0c;那么页面会很冗余&#xff0c;并且后期如果有修改容易遗漏&#xff0c…

生成式AI与大语言模型,东软已经准备就绪

伴随着ChatGPT的火爆全球&#xff0c;数以百计的大语言模型也争先恐后地加入了这一战局&#xff0c;掀起了一场轰轰烈烈的“百模大战”。毋庸置疑的是&#xff0c;继方兴未艾的人工智能普及大潮之后&#xff0c;生成式AI与大语言模型正在全球开启新一轮生产力革新的科技浪潮。 …

PostgreSQL (Hologres) 日期生成

PostgreSQL 生成指定日期下一个月的日期 &#xff08;在Hologres中&#xff0c;不支持递归查询&#xff09; SELECTto_char(T, YYYYMMDD)::int4 AS date_int,date(T) AS date_str,date_part(year, T)::int4 AS year_int,date_part(month, T)::int4 AS month_int,date_part(da…

中职组网络安全B模块-渗透提权2

任务五&#xff1a;渗透提权2 任务环境说明&#xff1a; 仅能获取xxx的IP地址 用户名&#xff1a;test&#xff0c;密码&#xff1a;123456 访问服务器主机&#xff0c;找到主机中管理员名称&#xff0c;将管理员名称作为Flag值提交&#xff1b; Flag:doyoudoyoudo 访问服…

使用Pytorch从零开始构建DCGAN

在本文中&#xff0c;我们将深入研究生成建模的世界&#xff0c;并使用流行的 PyTorch 框架探索 DCGAN&#xff08;生成对抗网络 (GAN) 的一种变体&#xff09;的实现。具体来说&#xff0c;我们将使用 CelebA 数据集&#xff08;名人面部图像的集合&#xff09;来生成逼真的合…

微服务学习|初识Docker、使用Docker、自定义镜像、DockerCompose、Docker镜像仓库

初识Docker 项目部署的问题 大型项目组件较多&#xff0c;运行环境也较为复杂&#xff0c;部署时会碰到一些问题 依赖关系复杂&#xff0c;容易出现兼容性问题 开发、测试、生产环境有差异 Docker如何解决依赖的兼容问题的? 将应用的Libs (函数库)、Deps (依赖)配置与应用…

c语言:用迭代法解决递归问题

题目&#xff1a; 解释&#xff1a;题目的意思就是用迭代法的空间和时间复杂的太高了&#xff0c;需要我们减小空间与时间的复杂度&#xff0c;我就想到了迭代法&#xff0c;思路和代码如下&#xff1a; #include <stdio.h> //这里是递归法转迭代法 int main() {int x,i…

Spark---转换算子、行动算子、持久化算子

一、转换算子和行动算子 1、Transformations转换算子 1&#xff09;、概念 Transformations类算子是一类算子&#xff08;函数&#xff09;叫做转换算子&#xff0c;如map、flatMap、reduceByKey等。Transformations算子是延迟执行&#xff0c;也叫懒加载执行。 2)、Transf…

Leetcode——121 买卖股票的最佳时机

(超时。。。。。。&#xff09;除了暴力法我是真的。。。。。。 class Solution {public int maxProfit(int[] prices) {int len prices.length;int max0;for(int i0;i<len-1;i){for(int ji1;j<len;j){int income prices[j] - prices[i];if(income>max){maxincome;…