图灵日记之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实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码

SpringBoot利用@Validated注解优雅实现参数校验

《SpringBoot利用@Validated注解优雅实现参数校验》在开发Web应用时,用户输入的合法性校验是保障系统稳定性的基础,​SpringBoot的@Validated注解提供了一种更优雅的解... 目录​一、为什么需要参数校验二、Validated 的核心用法​1. 基础校验2. php分组校验3

Java Predicate接口定义详解

《JavaPredicate接口定义详解》Predicate是Java中的一个函数式接口,它代表一个判断逻辑,接收一个输入参数,返回一个布尔值,:本文主要介绍JavaPredicate接口的定义... 目录Java Predicate接口Java lamda表达式 Predicate<T>、BiFuncti

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Spring Security方法级安全控制@PreAuthorize注解的灵活运用小结

《SpringSecurity方法级安全控制@PreAuthorize注解的灵活运用小结》本文将带着大家讲解@PreAuthorize注解的核心原理、SpEL表达式机制,并通过的示例代码演示如... 目录1. 前言2. @PreAuthorize 注解简介3. @PreAuthorize 核心原理解析拦截与