图灵日记之java奇妙历险记--String类

目录

  • String常用方法
    • 字符串构造
    • String对象的比较
    • 字符串查找
      • char charAt(int index)
      • int indexOf(int ch)
      • int indexOf(int ch, int fromIndex)
      • int indexOf(String str)
      • int indexOf(String str, int fromIndex)
      • int lastIndexOf(String str)
      • int lastIndexOf(String str, int fromIndex)
      • int lastIndexOf(int ch)
      • int lastIndexOf(int ch, int fromIndex)
    • 转化
      • 数值和字符串转化
      • 大小写转换
      • 字符串转数组
      • 格式化
    • 字符串替换
    • 字符串拆分
    • 字符串截取
    • 其他操作方法
    • 字符串的不可变性
  • StringBuilder和StringBuffer
    • StringBuilder

String常用方法

字符串构造

    public static void main(String[] args) {//使用常量串构造String a = "asdf";System.out.println(a);String b = new String();System.out.println(b);//直接newString对象String c = new String("ghjk");System.out.println(c);//使用字符数组进行构造char[] arr = {'a','b','c'};String e = new String(arr);System.out.println(e);String f = new String(arr,0,2);System.out.println(f);}

注意

  1. String是引用类型,内部并不存储字符串
    在这里插入图片描述
    public static void main(String[] args) {String s1 = new String("abc");String s2 = new String("efg");String s3 = s2;}

在这里插入图片描述

  1. 在Java中""引起来的也是String类型对象
        System.out.println("abcd".length());

在这里插入图片描述

        String s4 = "";String s5 = null;

s4指向一个对象为空,s5不指向任何对象

String对象的比较

  1. ==比较是否引用同一对象
    注意:
    对于内置类型,比较变量中的值;对于引用类型比较的是引用的地址

  2. boolean equals(Object anObject) 方法:按照字典序比较
    String类重写父类Object中的equals方法,Object中equals默认按照==比较,重写如下:

    public boolean equals(Object anObject) {//判断引用的是不是同一个对象if (this == anObject) {return true;}//判断anObject是不是String类型的对象if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;//判断二者长度if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;//逐个比较字符while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}
  1. int compareTo(String s)方法:按照字典序进行比较
    先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值
        String s1 = new String("abc");String s2 = new String("abe");System.out.println(s1.compareTo(s2));

在这里插入图片描述
如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值

        String s1 = new String("abc");String s2 = new String("ab");System.out.println(s1.compareTo(s2));

在这里插入图片描述

  1. int compareToIgnoreCase(String str) 方法:与compareTo方式相同,但是忽略大小写
        String s1 = new String("abc");String s2 = new String("ABc");System.out.println(s1.compareToIgnoreCase(s2));

在这里插入图片描述

字符串查找

char charAt(int index)

返回index位置上的字符,如果index为负数或者越界,抛出IndexOutOfBoundsException异常

        String s1 = new String("abcdef");System.out.println(s1.charAt(0));

在这里插入图片描述

        String s1 = new String("abcdef");for (int i = 0; i < s1.length(); i++) {System.out.print(s1.charAt(i));}

在这里插入图片描述

int indexOf(int ch)

返回ch第一次出现的位置,没有返回-1

        String s1 = new String("aaaaa");int index = s1.indexOf('a');System.out.println(index);

在这里插入图片描述

int indexOf(int ch, int fromIndex)

从fromIndex位置开始找ch第一次出现的位置,没有返回-1

    public static void main(String[] args) {String s1 = new String("aaaaa");int index = s1.indexOf('a',2);System.out.println(index);}

在这里插入图片描述

int indexOf(String str)

返回str第一次出现的位置,没有返回-1

        String s1 = "ababababcd";System.out.println(s1.indexOf("abcd"));

在这里插入图片描述

int indexOf(String str, int fromIndex)

从fromIndex位置开始找str第一次出现的位置,没有返回

        String s1 = "abcabcabc";System.out.println(s1.indexOf("abc",3));

在这里插入图片描述

int lastIndexOf(String str)

从后往前找,返回str第一次出现的位置,没有返回-1

        String s1 = "abcabcabc";System.out.println(s1.lastIndexOf("abc"));

在这里插入图片描述

int lastIndexOf(String str, int fromIndex)

从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返回-1

 String s1 = "abcabcabc";System.out.println(s1.lastIndexOf("abc",5));

在这里插入图片描述

int lastIndexOf(int ch)

从后往前找,返回ch第一次出现的位置,没有返回-1

        String s1 = "abcdefabcdef";System.out.println(s1.lastIndexOf('a'));

在这里插入图片描述

int lastIndexOf(int ch, int fromIndex)

从fromIndex位置开始找,从后往前找ch第一次出现的位置,没有返回-1

        String s1 = "abcdefabcdef";System.out.println(s1.lastIndexOf('a',5));

在这里插入图片描述

转化

数值和字符串转化

数值转字符串

        String s1 = String.valueOf(11.1);System.out.println(s1);

在这里插入图片描述
字符串转数值

        int i = Integer.parseInt("123");

大小写转换

        String s1 = "abD";System.out.println(s1.toUpperCase());

在这里插入图片描述

字符串转数组

        String s1 = "abc";char[] chars = s1.toCharArray();

格式化

        String s2 = String.format("%d,%d",3,5);System.out.println(s2);

在这里插入图片描述

字符串替换

在这里插入图片描述
replace方法进行重载,对参数类型不同
在这里插入图片描述
String实现了CharSequence接口,所以CharSequence接口能够接收String类型的数据

String str = new String("abcd");System.out.println(str.replace("ab", "1234"));

在这里插入图片描述

字符串拆分

将一个完整的字符串按照指定的分隔符划分为若干个子字符串。
在这里插入图片描述

        String str = new String("a b c d");String[] strings = str.split(" ");for (int i = 0; i < strings.length; i++) {System.out.println(strings[i]);}

在这里插入图片描述

        String str = new String("a b c d");String[] strings = str.split(" ",2);for (int i = 0; i < strings.length; i++) {System.out.println(strings[i]);}

在这里插入图片描述
注意事项:

  1. 字符"|“,”*“,”+"都得加上转义字符,前面加上 “\” .
        String str2 = new String("1|2|3");String[] strings1 = str2.split("|");for (int i = 0; i < strings1.length; i++) {System.out.println(strings1[i]);}

在这里插入图片描述

        String str2 = new String("1|2|3");String[] strings1 = str2.split("\\|");for (int i = 0; i < strings1.length; i++) {System.out.println(strings1[i]);}

在这里插入图片描述
2. 而如果是 “” ,那么就得写成 “\\” .
3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符.

        String str = new String("ab&cd%ef&gh%ij");String[] strings = str.split("&|%");for (int i = 0; i < strings.length; i++) {System.out.println(strings[i]);}

多次拆分

        String str = new String("ab&cd%ef&gh%ij");String[] strings = str.split("&");for (int i = 0; i < strings.length; i++) {String[] strings1 = strings[i].split("%");for (int j = 0; j < strings1.length; j++) {System.out.println(strings1[j]);}}

字符串截取

String substring(int beginIndex)
从指定索引截取到结尾

 		String str = new String("abcdef");System.out.println(str.substring(2));

String substring(int beginIndex, int endIndex)
截取部分内容

        String str = new String("abcdef");System.out.println(str.substring(0, 3));//下标取值范围前闭后开

其他操作方法

String trim()
去掉字符串中的左右空格,保留中间空格

        String str = new String("  ab cd ef  ");System.out.println(str.trim());

在这里插入图片描述

字符串的不可变性

String是一种不可变对象,字符串中的内容是不可改变的,字符串不可呗修改,是因为:

  1. String类在设计时就是不可改变的,String类实现描述中已经说明了
    String类中的字符实际保存在内部维护的value字符数组中
    String类被final修饰,表明该类不能被继承
    value被final修饰,表明value自身的值不能改变,即不能引用其他字符数组,但是其引用空间中的内容可以修改

  2. 所有及设计可能修改字符串内容操作都是创建一个新的对象,对新对象进行修改

final修饰类表示该类不能被继承,final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是可以修改的

StringBuilder和StringBuffer

StringBuilder

由于String不可更改的特性,为了方便字符串修改,java又提供StringBuilder和StringBuffer类,这两个类大部分功能是相同的

String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可以修改.
注意:String和StringBuilder类不能直接转换
String变为StringBuilder:利用StringBuilder的构造方法或append()方法
StringBuilder变为String:调用toString()方法

String,StringBuffer,StringBuilder的区别
String的内容不可修改,StringBuffer与StringBuilder的内容可以修改
StringBuffer与StringBuilder大部分功能是相似的

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

禅道(ZenTao)项目管理工具

认识禅道 禅道&#xff08;Zentao&#xff09;是一个面向敏捷开发的项目管理软件&#xff0c;它是一款开源的团队协作工具。禅道提供了项目管理、任务管理、缺陷管理、文档管理等功能&#xff0c;帮助团队高效地进行项目管理工作。禅道致力于提供简单易用、功能强大、界面美观的…

C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)

文章目录 1.计算日期到天数转换题目详情代码思路 2.KY111 日期差值题目详情代码思路 3.KY222 打印日期题目详情代码 4.KY258 日期累加题目详情代码思路 1.计算日期到天数转换 传送门 题目详情 代码 #include <iostream> using namespace std; int GetDay(int year,int…

Qt/C++中英输入法/嵌入式输入法/小数字面板/简繁切换/特殊字符/支持Qt456

一、前言 在嵌入式板子上由于没有系统层面的输入法支持&#xff0c;所以都绕不开一个问题&#xff0c;那就是在需要输入的UI软件中&#xff0c;必须提供一个输入法来进行输入&#xff0c;大概从Qt5.7开始官方提供了输入法的源码&#xff0c;作为插件的形式加入到Qt中&#xff…

【docker】安装 CentOS

查看可用的 CentOS版本 docker search centOS拉取 CentOS最新镜像 docker pull centos:latest 查看本地镜像 docker images运行容器 docker run -itd --name centos-demo centos查看进程 docker ps进入centos容器 docker exec -it centos-demo /bin/bash停止容器 docker …

Autosar信息安全入门系列01-SecOC基础介绍

本文框架 1. 概述2. SecOC基本概念2.1 SecOC是什么&#xff1f;2.2 新鲜度值与MAC值2.3 SecOC报文格式 3. SecOC报文发送及接收逻辑3.1 SecOC报文的发送3.2 SecOC报文的接收 1. 概述 本文为Autosar通信入门系列介绍&#xff0c;如您对AutosarMCAL配置&#xff0c;通信&#xf…

C++编写、生成、调用so库详解(二)

我们上篇中主要讲了怎么去打包so库 C编写、生成、调用so库详解(一) 这篇我们就来说一些怎么调用so库 目录 1.调用符合JNI标准的so库 2.调用不符合JNI标准的so库 上面说了两种不同类型的so库,我们分别来看一下怎么调用这两种,在调用so库之前,我们先说一下直接调用上面写的C…

解决Uniapp插件市场试用原生插件项目 没有MD5签名安卓无法自定基座打包的情况

Uniapp插件市场中&#xff0c;有些插件是原生插件&#xff0c;必须使用自定义基座才能打包。但是传统keytool命令&#xff0c;已经无法看到安卓证书的MD5签名。现采用Android Studio查询signingReport的办法获取证书的MD5签名&#xff0c;并对插件的示例项目进行打包运行。一、…

烟火检测/周界入侵/视频智能识别AI智能分析网关V4如何配置ONVIF摄像机接入

AI边缘计算智能分析网关V4性能高、功耗低、检测速度快&#xff0c;易安装、易维护&#xff0c;硬件内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。算法可按需组合、按…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-5 select

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>select</title> </head><body> <!--单选下拉菜单可设置默认选中项--> 所在城市&#xff08;单选&#xff09;:<br> <select>…

广告灯的左移右移

1&#xff0e;  实验任务 做单一灯的左移右移&#xff0c;硬件电路如图4.4.1所示&#xff0c;八个发光二极管L1&#xff0d;L8分别接在单片机的P1.0&#xff0d;P1.7接口上&#xff0c;输出“0”时&#xff0c;发光二极管亮&#xff0c;开始时&#xff0c;P1.0→P1.1→P1.2→…

Oracle 数据库备份与恢复的重要性与最佳实践

文章目录 一、备份的重要性二、备份工具-RMAN四、比较备份策略五、实例恢复六、完全恢复与不完全恢复七、备份与恢复脚本 引言&#xff1a; 在现代信息时代&#xff0c;数据已成为组织和企业最重要的资产之一。保护和恢复数据的能力对于确保业务连续性和减少潜在风险至关重要。…

传感器产业链图谱及上中下游市场剖析(附产业链全景图)

传感器是一种通常由敏感元件和转换元件组成的检测装置&#xff0c;测量并感知信息后&#xff0c;通过变换让传感器中的数据或价值信息转换成电信号或其他所需形式的输出&#xff0c;以满足信息的传输、处理、存储、显示、记录和控制等要求。 传感器产业链包括上游原材料、生产设…