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

2024-01-19 18:44

本文主要是介绍图灵日记之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大部分功能是相似的

这篇关于图灵日记之java奇妙历险记--String类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/623330

相关文章

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2