javaSE - 认识字符串(String class),String类里面方法的使用,下半部分

news2024/11/16 22:56:51

一、字符, 字节与字符串

1.1、字符与字符串之间进行转换

字符串内部包含一个字符数组,String 可以和 char[] 相互转换
在这里插入图片描述

将整个字符数组转换成字符串

public static void main(String[] args) {
        char[] chars = {'a','b','c','d','e','f','g'};
        String str = new String(chars);
        System.out.println(str);
    }

在这里插入图片描述

将部分数组中的内容变成字符串

public static void main(String[] args) {
        char[] chars = {'a','b','c','d','e','f','g'};
        String str = new String(chars,2,4);
        System.out.println(str);
    }

在这里插入图片描述

在字符串中,得到指定位置的字符(下标)

public static void main(String[] args) {
        String str = "abcdefg";
        char ch = str.charAt(3);
        System.out.println(ch);
    }

在这里插入图片描述

将字符串转换成字符数组

public static void main(String[] args) {
        String str = "abcdefg";
        char[] chars = str.toCharArray();
        System.out.println(Arrays.toString(chars));
    }

在这里插入图片描述

代码示例: 给定一个字符串, 判断其是否全部由数字所组成

将字符串变为字符数组而后判断每一位字符是否是" 0 “~”‘9’"之间的内容,如果是则为数字.

public static boolean isNumber(String str) {
        char[] data = str.toCharArray() ;
        for (int i = 0; i < data.length; i++) {
            if (data[i]<'0' || data[i]>'9') {
                return false ;
            }
        }
        return true ;
    }
    public static void main(String[] args) {
        String str = "123546";
        Boolean b = isNumber(str);
        System.out.println(b);
    }

1.2、字节与字符串

字节常用于数据传输以及编码转换的处理之中,String 也能方便的和 byte[] 相互转换
在这里插入图片描述

将字节数组转换成字符串

public static void main(String[] args) {
        byte[] bytes = {12,78,96,45,52,90,99};
        String str = new String(bytes);
        System.out.println(str);
    }

在这里插入图片描述

将字节数组中的部分内容变成字符串

public static void main(String[] args) {
        byte[] bytes = {12,78,96,45,52,90,99};
        String str = new String(bytes,2,4);
        System.out.println(str);
    }

在这里插入图片描述

将字符串转换成字节数组,并返回

public static void main(String[] args) {
        String str = "abcdefg";
        byte[] bytes = str.getBytes();
        System.out.println(Arrays.toString(bytes));
    }

在这里插入图片描述

编码转换处理,将字符串以不同的编码打印

public static void main(String[] args) throws UnsupportedEncodingException {
        String str1 = "张三";
        byte[] bytes1 = str1.getBytes("utf-8");
        System.out.println(Arrays.toString(bytes1));
        System.out.println("----------------------");
        byte[] bytes2 = str1.getBytes("GBK");
        System.out.println(Arrays.toString(bytes2));
    }

在这里插入图片描述

小结

那么何时使用 byte[ ], 何时使用 char[ ] 呢?

  • byte[] 是把 String 按照一个字节一个字节的方式处理, 这种适合在网络传输, 数据存储这样的场景下使用. 更适合
    针对二进制数据来操作.
  • char[] 是吧 String 按照一个字符一个字符的方式处理, 更适合针对文本数据来操作, 尤其是包含中文的时候

二、字符串常见操作

2.1、字符串比较

上面使用过String类提供的equals()方法,该方法本身是可以进行区分大小写的相等判断。除了这个方法之外,String类还提供有如下的比较操作

在这里插入图片描述

比较两个字符串的内容是否相同

public static void main(String[] args) {
        String str1 = "abcdefg";
        String str2 = "1654";
        String str3 = str1; 
        System.out.println(str1.equals(str2));
        System.out.println(str1.equals(str3));
    }

区分大小写的比较

public static void main(String[] args) {
        String str1 = "abcdefg";
        String str2 = "abcdefg";
        String str3 = "ABCdefg";
        System.out.println(str1.equals(str2));
        System.out.println(str1.equals(str3));
    }

不区分大小写的比较

就相当于是字符串“abcd”,和字符串“ABCD”,这两个字符串也是相同的

public static void main(String[] args) {
        String str1 = "abcdefg";
        String str2 = "ABCDEFG";
        String str3 = "ABCdefg";
        System.out.println(str1.equalsIgnoreCase(str2));
        System.out.println(str1.equalsIgnoreCase(str3));
    }

在这里插入图片描述

比较两个字符串的大小关系

在String类中compareTo()方法是一个非常重要的方法,该方法返回一个整型,该数据会根据大小关系返回三类内容:

1. 相等:返回0.
2. 小于:返回内容小于0.
3. 大于:返回内容大于0

public static void main(String[] args) {
        String str1 = "abcdefg";
        String str2 = "ABCDEFG";
        String str3 = "ABCdefg";
        String str4 = "abc";
        System.out.println(str1.compareTo(str2));
        System.out.println(str1.compareTo(str3));
        System.out.println(str1.compareTo(str4));

    }

在这里插入图片描述

compareTo()是一个可以区分大小关系的方法,是String方法里是一个非常重要的方法。
字符串的比较大小规则, 总结成三个字 “字典序” 相当于判定两个字符串在一本词典的前面还是后面. 先比较第一 个字符的大小(根据 unicode 的值来判定), 如果不分胜负, 就依次比较后面的内容

2.2、字符串查找

从一个完整的字符串之中可以判断指定内容是否存在,对于查找方法有如下定义
在这里插入图片描述

判断子字符串是否在字符串中

public static void main(String[] args) {
        String str1 = "ababcabcd";
        String tmp = "abc";
        boolean bool = str1.contains(tmp);
        System.out.println(bool);
    }

在这里插入图片描述

查找第一个子字符串出现的位置(下标)

public static void main(String[] args) {
        String str1 = "ababcabcd";
        String tmp = "abc";
        int ret = str1.indexOf(tmp);
        System.out.println(ret);
    }

在这里插入图片描述

从指定位置开始查找子字符串

public static void main(String[] args) {
        String str1 = "ababcabcd111";
        String tmp = "abc";
        int ret1 = str1.indexOf(tmp,4);
        int ret2 = str1.indexOf(tmp,9);
        System.out.println(ret1);
        System.out.println(ret2);
    }

在这里插入图片描述

从后向前查找子字符串的位置,返回下标

public static void main(String[] args) {
        String str1 = "ababcabcd111";
        String tmp = "abc";
        int ret1 = str1.lastIndexOf(tmp);
        System.out.println(ret1);
    }

在这里插入图片描述

从指位置查找,从后往前查找

public static void main(String[] args) {
        String str1 = "ababcabcd111";
        String tmp = "abc";
        int ret1 = str1.lastIndexOf(tmp,4);
        int ret2 = str1.lastIndexOf(tmp,9);
        System.out.println(ret1);
        System.out.println(ret2);
    }

在这里插入图片描述

判断是否以指定的字符串开头

public static void main(String[] args) {
        String str1 = "ababcabcd111";
        String tmp1 = "abab";
        String tmp2 = "ACADD";
        boolean bool1 = str1.startsWith(tmp1);
        boolean bool2 = str1.startsWith(tmp2);
        System.out.println(bool1);
        System.out.println(bool2);
    }

在这里插入图片描述

从指定位置判断是否以字符串开头

public static void main(String[] args) {
        String str1 = "ababcabcd111";
        String tmp1 = "abcd";
        String tmp2 = "abcd";
        boolean bool1 = str1.startsWith(tmp1,5);
        boolean bool2 = str1.startsWith(tmp2,3);
        System.out.println(bool1);
        System.out.println(bool2);
    }

在这里插入图片描述

判断是否以指定字符串结尾

public static void main(String[] args) {
        String str1 = "ababcabcd111";
        String tmp1 = "111";
        String tmp2 = "abcd";
        boolean bool1 = str1.endsWith(tmp1);
        boolean bool2 = str1.endsWith(tmp2);
        System.out.println(bool1);
        System.out.println(bool2);
    }

在这里插入图片描述

2.3、字符串替换

使用一个指定的新的字符串替换掉已有的字符串数据,可用的方法如下
在这里插入图片描述

替换所有指定的内容

public static void main(String[] args) {
        String str1 = "ababcabcd111";
        String tmp1 = str1.replaceAll("a","*");
        String tmp2 = str1.replaceAll("aa","*");
        String tmp3 = str1.replaceAll("ab","*");
        System.out.println(tmp1);
        System.out.println(tmp2);
        System.out.println(tmp3);
    }

在这里插入图片描述

替换第一次出现的字符串

public static void main(String[] args) {
        String str1 = "ababcabcd111";
        String tmp1 = str1.replaceFirst("a","*");
        String tmp2 = str1.replaceFirst("aa","*");
        String tmp3 = str1.replaceFirst("ab","*");
        System.out.println(tmp1);
        System.out.println(tmp2);
        System.out.println(tmp3);
    }

在这里插入图片描述

注意事项: 由于字符串是不可变对象, 替换不修改当前字符串, 而是产生一个新的字符串

2.4、字符串拆分

可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串。
可用方法如下:

在这里插入图片描述

将字符串全部拆分

public static void main(String[] args) {
        String str1 = "hi my name is AAA";
        String[] tmp = str1.split(" ");

        for (String str : tmp) {
            System.out.println(str);
        }
    }

在这里插入图片描述

将字符串部分拆分,该数组的长度就是limit极限

public static void main(String[] args) {
        String str1 = "hi my name is AAA";
        String[] tmp = str1.split(" ",3);

        for (String str : tmp) {
            System.out.println(str);
        }
    }

在这里插入图片描述

代码示例: 拆分IP地址

public static void main(String[] args) {
        String str1 = "255.255.255.0";
        String[] tmp = str1.split("\\.");

        for (String str : tmp) {
            System.out.println(str);
        }
    }

在这里插入图片描述

注意事项:

  1. 分割字符"|“,”*“,”+“都得加上转义字符,前面加上” \ “.
  2. 而如果是” \ “,那么就得写成” \ \ \ \ “.
  3. 如果一个字符串中有多个分隔符,可以用”|"作为连字符

代码示例: 多次拆分

public static void main(String[] args) {
        String str1 = "name=zhangsan&age=18";
        String[] tmp = str1.split("&");

        for (int i = 0; i < tmp.length; i++) {
            String[] ret = tmp[i].split("=");
            System.out.println(ret[0] + " " + ret[1]);
        }
    }

在这里插入图片描述

2.5、字符串截取

从一个完整的字符串之中截取出部分内容。可用方法如下:
在这里插入图片描述

从指定位置截取到结尾

public static void main(String[] args) {
        String str1 = "name=zhangsan&age=18";
        String tmp = str1.substring(5);
        System.out.println(tmp);
    }

截取部分长度

public static void main(String[] args) {
        String str1 = "name=zhangsan&age=18";
        String tmp = str1.substring(5,9);
        System.out.println(tmp);
    }

注意事项:

  1. 索引从0开始
  2. 注意前闭后开区间的写法, substring(0, 5) 表示包含 0 号下标的字符, 不包含 5 号下标(左闭右开区间( 】)

2.6、其他操作方法

可以看一下java官方手册https://docs.oracle.com/javase/8/docs/api/index.html
在这里插入图片描述

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

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

相关文章

Sulfo-NHS-SS-biotin,CAS:325143-98-4介绍,生物素双硫键琥珀酰亚胺

英文名称&#xff1a;Sulfo-NHS-SS-biotin 化学式&#xff1a;C19H27N4NaO9S4 分子量&#xff1a;606.7 CAS&#xff1a;325143-98-4 纯度&#xff1a;95% 储存条件&#xff1a;-20C 结构式&#xff1a; 简介&#xff1a;磺基NHS SS生物素是一种可切割试剂&#xff0c;用…

【剧前爆米花--爪哇岛寻宝】抽象类和接口(上)——理论及逻辑理解

作者&#xff1a;困了电视剧 专栏&#xff1a;《JavaSE语法与底层详解》 文章分布&#xff1a;这是一篇关于抽象类和接口的文章&#xff0c;在本篇文章中我会介绍其相关的定义和语法&#xff0c;并且揭示接口和抽象类的运行逻辑&#xff0c;提高对面对象编程的理解。 目录 抽象…

吴恩达week6 ~批量梯度下降 指数加权平均 动量梯度下降 学习率衰减 Adam

文章目录前言一、小批量梯度下降 mini-batch1、batch gradient descent2、stochastic gradient descent3、mini-batch gradient descent二、指数加权平均1.什么是指数加权平均2、理解指数加权平均3、与普通求平均值的区别4、指数加权平均的偏差修正三、gradient descent with m…

Allegro批量替换过孔类型操作指导

Allegro批量替换过孔类型操作指导 Allegro支持批量替换过孔类型,具体操作如下 例如需要把这些VIA10的过孔全部替换成VIA8的过孔 选择菜单上面的Tool-padstack-Group edit 右击选择temp Group 选中需要替换的过孔 选完之后右击选择complete 弹出Padstack Map窗口,modify…

java中多线程、并发、并行、线程与进程、线程调度、创建线程的方式

多线程&#xff1a; 多线程比单线程快&#xff0c;前面简单介绍过&#xff1a;集合如果是不安全的&#xff0c;那么它就是多线程的&#xff0c;了解多线程之前&#xff0c;先了解什么是并发和并行。 并发&#xff1a;指两个或多个事件在同一个时间段内发生。 并行&#xff1…

高通平台开发系列讲解(AtCoP篇)AtCoP架构简介

文章目录 一、ATCoP简介二、ATCoP架构三、流程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇讲介绍高通ATCoP的架构。 一、ATCoP简介 ATCoP(AT Command Processor)是高通平台对于AT命令处理的模块,通过它,我们可以实现对AT命令的修改和新增。ATCoP接收从串口…

[附源码]Python计算机毕业设计公司办公自动化系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

跟大佬展开激励讨论String的不可变性

目录 大佬证明&#xff1a; 我的证明&#xff1a; 后续 什么是不可变&#xff1f; String为什么不可变 为什么要设计成为不可变的呢&#xff1f; 1.首先我们最先可以想到的Java主要做的就是安全 2.其次是字符串常量池的需要 String真的不可变吗&#xff1f; ps&#…

平淡无奇,2022年终总结

1前言 一年又一年&#xff0c;时间过得太快啦&#xff01; 最近总是想着2022年的点点滴滴&#xff0c;一年时光不得写点什么不一样的&#xff0c;可是思前想后觉得这一年也没什么不一样的啊。所以呢&#xff0c;2022年终总结标题就取名为平淡无奇。 人一生最重要的是什么&#…

Java Servlet + H2数据库之集成环境配置

在 EclipseMavenTomcat 集成开发环境配置 搭建了一个Servlet的开发环境&#xff0c;整合Tomcat 作为Web容器。如何要加入数据库开发要怎么处理呢&#xff1f; 在实际开发中&#xff0c;一般会选择MySQL&#xff0c;Oracle 等数据库&#xff0c; 但是如果只是学习和演示&#x…

DPDK源码分析之网络基础知识

字节对齐 attribute ((aligned (1))); 在设计不同CPU下的通信协议时&#xff0c;或者编写硬件驱动程序时寄存器的结构这两个地方都需要按一字节对齐。即使看起来本来就自然对齐的也要使其对齐&#xff0c;以免不同的编译器生成的代码不一样. 如果跨越了4字节边界存储&#xff…

java之JVM的位置和体系结构

JVM的概念&#xff1a; JVM 即 Java Virtual Machine&#xff0c;中文名为 Java虚拟机&#xff0c;一般情况下&#xff0c;对于C/C 程序&#xff0c;编译成二进制文件后&#xff0c;就可以直接执行了&#xff0c;但Java 需要使用 javac 编译成 .class 文件&#xff0c;还需要使…

【LSTM回归预测】基于matlab主成分分析结合BiLSTM数据回归预测【含Matlab源码 2276期】

一、LSTM和BiLSTM神经网络结构及原理介绍 长短期记忆网络(Long short-term memory, LSTM)实质上可以理解为一种特殊的RNN,主要是为了解决RNN网络在长序列训练过程中发生梯度消失和梯度爆炸的问题。相比于RNN,LSTM主要是引入了细胞形态(cell state)用于保存长期状态&#xff0c…

世界杯决赛倒计时,你最看好谁

一、期待终极决赛 C站肯定有许多看球的朋友吧。明天即将迎来2022年世界杯终极对决&#xff0c;阿根廷队对战法国。来赶个晚集&#xff0c;也来聊聊世界杯&#xff0c;下一个四年就是2026&#xff0c;会不会还有这种精神呢。先来回顾一下本轮世界杯比赛中的对阵吧。 本轮世界杯中…

Win11+RTX3060+Anconda+CUDA11.3+cuDNN8.2+Pytorch1.10一条龙服务2

Win11RTX3060AncondaCUDA11.3cuDNN8.2Pytorch1.10一条龙服务 &#xff08;1&#xff09;查看安装了哪些包 conda list&#xff08;2)查看当前存在哪些虚拟环境 conda env list &#xff08;3&#xff09;创建虚拟环境&#xff0c;你可以创建好几个虚拟环境&#xff0c;虚拟环…

Flex布局小练--博文列表item布局实现

文章目录前言元素组成实现html部分布局总结前言 今天划一个水先&#xff0c;没办法&#xff0c;作孽没写完&#xff0c;什么这不是作孽的一部分嘛&#xff1f;&#xff01;听不见&#xff0c;听不见。 来先看一下我们要做的一个效果&#xff1a; 首先是这个页面下面的&#xf…

如何基于Jetbrains IDEA DataBase从数据库表中生成对应的Java Bean

在日常的项目开发过程中&#xff0c;大部分人可能都会遇到过想从表自动生成带有注释的Java Bean&#xff0c;在Jetbrains IDEA中通过DataBase工具也是可以生成的。Jetbrains IDEA的Database借助一个名称为Generate POJOs.groovy的groovy模板文件&#xff0c;可以帮我们做代码生…

Python工程师Java之路(t)SpringBoot部署步骤 java -jar

文章目录步骤1、开发环境2、新建工程3、新建controller4、开发环境试运行和测试5、打包运行命令补充步骤 1、开发环境 WIN10IDEA2021Maven3.6.3JDK1.8 2、新建工程 选择Spring和Java版本 添加依赖 3、新建controller package com.example.demo.controller;import org.spr…

macOS Ventura 13.1 (22C65) Boot ISO 原版可引导镜像

本站下载的 macOS Ventura 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。 2022 年 12 月 13 日&#xff0c;macOS Ventura 13.1 推出了“无边记”&#x…

基于python的PatchMatchStereo立体匹配算法实现

文章目录前言一、PatchMatchStereo是什么&#xff1f;1.随机初始化2.迭代传播2.1空间传播2.2视图传播2.3帧间传播2.4平面细化二、PatchMatchStereo立体匹配算法实现前言 PatchMatchStereo是Michael Bleyer等在2011年发表于British Machine Vision Conference&#xff08;BMVC&a…