【Java数据类型】“字符串”全解之“String类”

Java中字符串String类,String类型的底层原理,什么是StringBuffer,StringBuffer类的原理 String、StringBuffer 阅读详情

字符串

  • Java中,和字符串有关的类有:String、StringBuffer、StringBuilder;所有的字符串操作都是由上述的3个类管理。
  • 下文,将介绍String字符串类的基本原理。

String初始化

String的初始化,就是指String类的构造方法,以下是String类的构造方法(具体的详见API文档,只因API文档看着蛋疼,先抽取这几个出来看看):
初始化方式:

  1. String()--------- 初始化一个String对象,表示一个空字符序列
  2. String(String value)--------- 利用一个直接量创建一个新串
  3. String(char[] value) --------- 利用一个字符数组创建
  4. String(char[] value,int offset,int count)--------- 截取字符数组,从offset开始count个字符创建
  5. String(StringBuffer buffer)--------- 利用StringBuffer创建
public class StringDemo {
	public static void main(String[] args) {
		//方式1
		//String(String original):把字符串数据封装成字符串对象
		String s1 = new String("hello");
		System.out.println("s1:"+s1);
		System.out.println("---------");
		
		//方式2
		//String(char[] value):把字符数组的数据封装成字符串对象
		char[] chs = {'h','e','l','l','o'};
		String s2 = new String(chs);
		System.out.println("s2:"+s2);
		System.out.println("---------");
		
		//方式3
		//String(char[] value, int index, int count):把字符数组中的一部分数据封装成字符串对象
		//String s3 = new String(chs,0,chs.length);
		String s3 = new String(chs,1,3);
		System.out.println("s3:"+s3);
		System.out.println("---------");
		
		//方式4
		String s4 = "hello";
		System.out.println("s4:"+s4);
	}
}

String的两种初始化方式比较

String str=“hello”;
这种方式创建字符串的时候:

  1. JVM先检查字符串常量池中是否存在
  2. 存在,返回该串在字符串常量池中的内存地址
  3. 不存在,在常量池中创建该串的并返回地址;

String str=new String(“hello”);
这种方式创建字符串的时候:

  1. JVM先检查字符串常量池中是否存在
  2. 存在,返回该串在池中的地址
  3. 不存在,在池中创建,复制该串到堆内存中新创建的对象中,返回堆中的地址;
  4. 创建了两个对象,一个对象位于字符串常量池中,一个对象是位于堆内存中;
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
String str4 = new String("hello");

System.out.println("str1==str2?" + (str1 == str2)); //true
System.out.println("str3==str4?" + (str3 == str4)); //false
System.out.println("str3==str4?" + (str3 == str4)); //false
System.out.println("str3.equals(str2)?" + (str3.equals(str4))); //true

原理解析:
在这里插入图片描述
在这里插入图片描述

注:上图来自“黑马程序员”的上课笔记。

String类方法

最常用

求字符串长度
public int length() 该方法用于获取字符串的长度

String str = new String("asdfzxc");
int strlength = str.length();//strlength = 7

求字符串某一位置字符
public char charAt(int index)//返回字符串中指定位置的字符;注意字符串中第一个字符索引是0,最后一个是length()-1。

String str = new String("asdfzxc");
char ch = str.charAt(4);//ch = z

字符串转换
1)public String toLowerCase() //返回将当前字符串中所有字符转换成小写后的新串
2)public String toUpperCase() //返回将当前字符串中所有字符转换成大写后的新串
3)public char[] toCharArray() //把字符串转换为字符数组

判断操作

String类的判断功能:

  1. boolean equals(Object obj):比较字符串的内容是否相同。如果一个方法的形式参数是Object,那么这里我们就可以传递它的任意的子类对象。

  2. boolean equalsIgnoreCase(String str):比较字符串的内容是否相同, 忽略大小写

  3. boolean startsWith(String str):判断字符串对象是否以指定的str开头

  4. boolean endsWith(String str):判断字符串对象是否以指定的str结尾

  5. boolean contains(String str):判断该字符串中 是否包含给定的字符串

  6. boolean isEmpty():判断该字符串的内容是否为空的字符串

比较操作

String类的比较概要:

  1. public int compareTo(String anotherString) //首先,会对两个字符串左对齐,然后从左到右一次比较;如果相同,继续;如果不同,则计算不同的两个字符的ASCII值的差,返回就行了。与后面的其他字符没关系。

  2. public int compareToIgnore(String anotherString) //与compareTo方法相似,但忽略大小写。

  3. public boolean equals(Object anotherObject) //比较当前字符串和参数字符串,在两个字符串相等的时候返回true,否则返回false。

  4. public boolean equalsIgnoreCase(String anotherString) //与equals方法相似,但忽略大小写。

public static void main(String[] args) {
		String str1 = new String("abc");
		String str2 = new String("ABC");
		int a = str1.compareTo(str2);//a>0
		int b = str1.compareToIgnoreCase(str2);//b=0
		boolean c = str1.equals(str2);//c=false
		boolean d = str1.equalsIgnoreCase(str2);//d=true
	}

查找操作

String类查找操作方法概览:

  1. public int indexOf(int ch/String str) //用于查找当前字符串中字符或子串,返回字符或子串在当前字符串中从左边起首次出现的位置,若没有出现则返回-1。

  2. public int indexOf(int ch/String str, int fromIndex) //改方法与第一种类似,区别在于该方法从fromIndex位置向后查找。

  3. public int lastIndexOf(int ch/String str) //该方法与第一种类似,区别在于该方法从字符串的末尾位置向前查找。

  4. public int lastIndexOf(int ch/String str, int fromIndex) //该方法与第二种方法类似,区别于该方法从fromIndex位置向前查找。

	public static void main(String[] args) {
		String str = "I am a good student";
		int a = str.indexOf('a');//a = 2
		int b = str.indexOf("good");//b = 7
		int c = str.indexOf("w",2);//c = -1
		int d = str.lastIndexOf("a");//d = 5
		int e = str.lastIndexOf("a",3);//e = 2
	}

替换操作

String类的替换操作概览:

  1. public String replace(char oldChar, char newChar) //用字符newChar替换当前字符串中所有的oldChar字符,并返回一个新的字符串。

  2. public String replaceFirst(String regex, String replacement) //该方法用字符replacement的内容替换当前字符串中遇到的第一个和字符串regex相匹配的子串,应将新的字符串返回。

  3. public String replaceAll(String regex, String replacement) //该方法用字符replacement的内容替换当前字符串中遇到的所有和字符串regex相匹配的子串,应将新的字符串返回。

String str = "asdzxcasd";
String str1 = str.replace('a','g');//str1 = "gsdzxcgsd"
String str2 = str.replace("asd","fgh");//str2 = "fghzxcfgh"
String str3 = str.replaceFirst("asd","fgh");//str3 = "fghzxcasd"
String str4 = str.replaceAll("asd","fgh");//str4 = "fghzxcfgh"

子串相关

  1. public String substring(int beginIndex) //该方法从beginIndex位置起、到本串结束,作为一个新的字符串返回。

  2. public String substring(int beginIndex, int endIndex) //该方法从beginIndex位置起、到endIndex-1位置的字符,作为一个新的字符串返回。

  3. public CharSequence subSequence(int beginIndex, int endIndex)

  • 其实subSequence()内部就是调用的substring(beginIndex, endIndex),只是返回值不同。
  • subString返回的是String,subSequence返回的是实现了CharSequence接口的类,也就是说使用subSequence得到的结果,只能使用CharSequence接口中的方法。
 String str1 = new String("asdfzxc");
 String str2 = str1.substring(2);//str2 = "dfzxc"
 String str3 = str1.substring(2,5);//str3 = "dfz"

MISC

String trim()
  截去字符串两端的空格,但对于中间的空格不处理。

regionMatches(boolean b, int firstStart, String other, int otherStart, int length)
  从当前字符串的firstStart位置开始比较,取长度为length的一个子字符串,other字符串从otherStart位置开始,指定另外一个长度为length的字符串,两字符串比较,当b为true时字符串不区分大小写。

String[] split(String str)
  将str作为分隔符进行字符串分解,分解后的字字符串在字符串数组中返回。

public class StringDemo {
	public static void main(String[] args) {
		//创建字符串对象
		String s1 = "helloworld";
		String s2 = "  helloworld  ";
		String s3 = "  hello  world  ";
		System.out.println("---"+s1+"---");
		System.out.println("---"+s1.trim()+"---");
		System.out.println("---"+s2+"---");
		System.out.println("---"+s2.trim()+"---"); //去两端的空格
		System.out.println("---"+s3+"---");
		System.out.println("---"+s3.trim()+"---"); //去两端不去中间的空格
		System.out.println("-------------------");
		
		//String[] split(String str); 依据参数来分割字符串
		//创建字符串对象
		String s4 = "aa,bb,cc";
		String[] strArray = s4.split(",");
		for(int x=0; x<strArray.length; x++) {
			System.out.println(strArray[x]);
		}
	}
}

String类的串转换

String串转换为基本类型

Notice:

  1. 所转换的串必须由0~9之间的字符组成,不能含有其他字符;
  2. 所转换的串的大小必须在基本数据类型可容纳的范围之内;
  3. java.lang包中有Byte、Short、Integer、Float、Double类的调用方法:
1) public static byte parseByte(String s) //把串转换为一个byte类型
2) public static short parseShort(String s) //把串转换为一个short类型
3) public static short parseInt(String s) //把串转换为一个short类型
4) public static long parseLong(String s) //把串转换为一个long类型
5) public static float parseFloat(String s) //把串转换为一个float类型
6) public static double parseDouble(String s)  //把串转换为一个double类型
//试一试:
	public static void main(String[] args) {
		String str = new String("-127");
		byte bb = Byte.parseByte(str); //str的范围为:[-127, 127], 超出则报错
		System.out.println(bb); //输出:-127
		
		String str1 = new String("32767");
		short ss = Short.parseShort(str1); //str1的范围[-32767, 32767], 超出则报错
		System.out.println(ss);
	}

基本类型串转换为String串

String类中提供了String valueOf()放法,用作基本类型转换为字符串类型。

1)static String valueOf(char data[])
2)static String valueOf(char data[], int offset, int count)
3)static String valueOf(boolean b)
4)static String valueOf(char c)
5)static String valueOf(int i)
6)static String valueOf(long l)
7)static String valueOf(float f)
8)static String valueOf(double d)
public class Main {
	public static void main(String[] args) {
		byte a = 10;
		String str_a = String.valueOf(a);
		System.out.println(getType(a)); //class java.lang.Byte
		
		System.out.println(getType(str_a)); //class java.lang.String
		
	}
	public static String getType(Object o){ //获取变量类型方法
		return o.getClass().toString(); //使用int类型的getClass()方法
	}
}

规避字符串的空指针异常

//避免空指针异常
//防止String类的空指针异常,以下的代码不安全,加入在调用这个方法时传入的参数是个空指针,则会发生空指针异常
	public static void test01(String str) {
		if(str.equals("china")) { //str.equals("china")的调用者是str,str可能发生为空的情况
			System.out.println("right");
		}
		else {
			System.out.println("error");
		}
	}
	
	//解决方案:让常用作方法的调用者,可以避免空指针异常
	public static void test02(String str) {
		if("china".equals(str)) {
			System.out.println("right");
		}
		else {
			System.out.println("error");
		}
	}

Java Character 类和Java String 类 Character 类用于对单个字符进行操作。Character 类在对象中包装一个基本类型的值。Java String 类字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。 阅读详情

相关推荐

Java(api中常用类,包括Object类,Arrays类,String类,基本数据类型包装类)

equals方法用于比较两个对象中的信息是否相等1.String类是java中专门用于处理字符串的类2.String类是1被final修饰的,其他类不能继承3.String类中,有一个char数组用来存储字符串的内容4.字符串的对象一旦创建后就不能改变了(因为char数组是被final修饰的),一旦值改变了就会创建一个新的字符串对象。

Vaclee的博客 861

编写一个Java应用程序,实现如下功能: (1) 判断两个字符串是否相同,s1=”you are a student”,s2=”how are you”; (2) 判断字符串”220302198510

编写一个Java应用程序,实现如下功能: (1) 判断两个字符串是否相同,s1=”you are a student”,s2=”how are you”; (2) 判断字符串”22030219851022024”的前缀、后缀是否和某个字符串”220302”相同; (3) 按字典顺序比较两个字符串”你”和”我”的大小关系; (4) 将数字型字符串”100”和”123.678”转换为数字; ...

程序员凯小白的博客 9237

181001120_Delicious!_子串_

编写一个功能类,该类的作用是可以根据给定的字符串(字符串中的内容是英文单词、英文字符和标点符号,字符串中单词之间有空格)和子串,计算出字符串中包含多少个子串。(要求:对字符串分词时使用 String 类的 split 方法。可以上网自行查找使用split 方法如何处理多个空格。)在主类中输入字符串和子串,之后使用功能类检索出子串的数量。例如,可以输入字符串“I like apple. The apple is delicious. Do you like apple?”和子串“apple”,程序的运行结果应该是检索到 3 个 apple。

String类、字符串缓冲区、正则表达式、

1、String类 (1)概述: String类代表字符串,字符串是常量,创建之后不能更改,一旦这个字符串确定了,就会在内存中(堆中的常量池)生成这个字符串,字符串本身不能改变,但变量的地址是能够改变的,字符串的本质是一个字符的数组。 (2)字符串的构建 字符串中有大量的的重载构造方法,通过String类的构造方法可以完成字符穿的构建,还可以通过双引号的方式进行创建对象 两者的...

anmodiao5169的博客 295

糖果【贪心】

【问题描述】 有N(1≤N <100,000)N(1≤N~<100,000)N(1≤N <100,000)种不同类型的糖果,每种糖果数量无限多。第i种糖果每颗的价格是Pi(1≤Pi≤1018),有Ci(1≤Ci≤1018)P_i(1≤P_i≤10^{18}),有C_i (1≤C_i≤10^{18)}Pi​(1≤Pi​≤1018),有Ci​(1≤Ci​≤1018)头牛想吃这种糖果。 FarmerJohnFarmer JohnFarmerJohn拥有金钱BBB元(1≤B≤1

算法小猪的博客 795

PyTorch实战:手把手教你用QAT量化感知训练拯救模型精度(附避坑指南)

本文详细介绍了如何使用PyTorch进行QAT量化感知训练,以提升模型在边缘设备上的推理精度。通过核心原理讲解、实战代码示例和避坑指南,帮助开发者掌握从环境配置、模型训练到边缘部署的全流程,有效解决传统量化方法导致的精度损失问题。

c7d8e的博客 326

【C语言】案例五十二 字符串替换(二)【字符,字符串,字符数组】

案例实现 1,案例设计 自定义一个具有字符串替换功能的函数 使用for循环从指定位置遍历字符串“Good moring”; 用字符串“evening”中的字符逐一替换掉字符串“Good moring”中“morning字符串 主函数中调用字符串替换函数 最后将替换后的字符串输出到屏幕上 2,完整代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> /

yusihe的博客 1092

VisionMaster 4.2.0安装

按照顺序安装。

XuXing_java的专栏 3783

剑指offer第二版-5替换空格

题目:实现一个函数,把字符串中的每个空格替换成“%20” 代码: /** * 实现一个函数,把字符串中的每个空格替换成“%20”。 * 通过按传统办法,假设字符的长度是n。对每个空格字符,需要移动后面O(n)个字符,因此对含有O(n)个空格字符串而言总的时间效率是O(n2) * 在前面的分析中,我们发现数组中的很多字符都移动了很多次,能不能减少移动的次数呢?我们换一种思路,把从前向后替换成从...

VicterTian的博客 622

Vben Admin权限管理全解析:从动态菜单到按钮级控制(附代码示例)

本文全面解析Vben Admin框架的权限管理系统,从动态菜单生成到按钮级细粒度控制,提供完整的实现方案和代码示例。深入探讨基于角色-权限模型的架构设计,分享前后端协作的最佳实践,帮助开发者快速构建安全高效的企业级后台系统。

weixin_30919429的博客 485

【Qt】Qt5.15在线安装避坑指南:从代理配置到组件选择的完整实践

本文详细介绍了Qt5.15在线安装的全流程避坑指南,包括代理配置、组件选择和常见问题解决方案。通过使用Fiddler工具和国内镜像源,可显著提升下载速度。文章还提供了组件选择的黄金法则和安装后的验证步骤,帮助开发者高效完成Qt5.15的安装与配置。

weixin_42550052的博客 270

【Java】String类的理解及字符串常量池

字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。Java的String类在lang包里,java.lang.String是java字符串类,包含了字符串的值和实现字符串相关操作的一些方法;java.lang包里面的类都不需要手动导入,是由程序自动导入。String表示字符串类型,属于引用数据类型, 内部并不存储字符串本身;Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。.........

trong_ 的烂笔头 2629

华为交换机NAC配置避坑指南:搞定打印机、摄像头等哑终端接入(含MAC旁路认证)

本文详细解析华为交换机NAC配置中的MAC旁路认证方案,特别针对打印机、摄像头等哑终端接入问题提供避坑指南。通过对比传统模式与统一模式的配置差异,结合实际案例和典型错误排查,帮助网络工程师高效解决802.1X认证环境下的哑终端接入难题。

weixin_30338497的博客 441

Java中String类的使用

今天来复习复习Java中String类的使用。Java字符串String从表面上看,字符串就是双引号之间的数据,例如"Hello World",在Java中,字符串其实就是一个String类的对象,可以这样来定义一个字符串:String str1="Hello World";//第一种方法 String str2=new String("Hello World");//第二种方法这两种都可以创建字...

xkfanhua的博客 9266

「大模型学习」(11)kv cache与vllm详解,一文读懂!

Key(键):表示上下文的特征。Value(值):表示上下文的内容。Query(查询):表示当前 token 的查询向量。AttentionQKVsoftmaxQKTdkVAttentionQKVsoftmaxdk​​QKT​V),每次生成一个新 token(比如下一个词),模型会再次查看之前的所有K和V,以计算当前 token 的注意力。问题:每次都重新计算之前的 K/V 很浪费!项目维度(简化)含义Q当前 token 的查询向量。

qq_43044037的博客 5405

【一 扣子客户案例合集】【 1.1 抖音电商:通过扣子智能体重塑电商服务新体验】

**摘要:**抖音电商借助扣子(Coze)智能体平台重塑客服体验,通过无代码开发、多模态交互和跨平台发布等功能,解决了传统客服高峰期压力大、成本高及响应机械等痛点。智能体采用直接面客与人工监管结合模式,实现高效精准服务,并通过解构流程、模块化设计优化系统架构。其技术优势包括零配置学习、意图识别、情绪感知等,实际应用中显著提升客服效率300%以上,改善用户体验。未来将进一步拓展至商品推荐、直播互动等场景,推动电商服务智能化升级。

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 1569

【Java数据类型】“字符串”全解之“StringBuffer类和StringBuilder类”

在上一篇讲解字符串类String的文章中: 点击查看:【Java数据类型】“字符串”全解之“String类” 详解了String类对于字符串的构造方法、功能API、基本数据类型与String类的转换,对Java语言中对于字符串的理解和使用有一定的认识与理解,在这篇文章中,我将继续阐述其他两种字符串相关类:StringBuffer和StringBuilder。 文章目录StringBuffer方...

极客-多重人格递归 328

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java——认识String类

本文主要讲了String类的常用方法和特性,还有修改字符串所需的StringBuilder 类和StringBuffer 类以及它们的常用方法

wx2023_10_15的博客 1450

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java字符串(String类)

Java字符串(String类)

m0_63635730的博客 1657

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

详细分析与梳理Java基础中的重点知识:String类 ,Java字符串String类入门,剖析String类底层机制

String类是和int, double, boolean......不一样,String是引用数据类型。那么引用数据类型和基本数据类型有什么区别呢?String类在后续的开发中是一个很常见的知识点,加深对String类的了解对理解Java的面向对象特性也颇有裨益。

q251932440的博客 1111

Java 字符串(String 类)详解

本文详细介绍了Java中String类的核心概念和常用方法。首先阐述了String类的两大实例化方式(直接赋值和构造方法)及区别,重点分析了字符串不可变特性及其内存优化机制(享元设计模式)。随后全面讲解了字符串操作的常用方法,包括获取长度、字符截取、内容比较、判断操作、拆分替换等,并介绍了字符串与其他数据类型的转换方法。此外,还解析了字符串常量池的工作原理,说明了intern()方法的手动入池机制。

小二丶的博客 1216

Java ==> String类(字符串)

这些是String类的一些较为常用的知识和方法,当然String类方法不止这些,如果还想了解更多的方法我们可以进行查阅JDK1.8的文档进行学习,各位铁子找不到的话可以私信我,我给发一份。希望这篇文章能够为您带来一些有价值的信息和启示。在未来的日子里,我们将继续探索更多关于博客技术的精彩内容,敬请期待。如果您有任何问题或建议,欢迎在评论区留言,我们一起交流学习。

2401_84365662的博客 1380

Java学习总结--字符串String类和基本的数据类型有什么区别

1. String类是final类,可以从String类的定义来看出。String类的开头定义如下:从上面可以看出,String类是final类,也就意味着String类是不能被继承的。1)String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法。在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。2)上面...

lhj_sjtu的博客 9765

【Java】—— String类

String类是Java中的一个类,用于表示字符串。它是Java中最常用的类之一,用于处理文本。

weixin_74882234的博客 1519

Java——String类

Java中关于string类的一些简单介绍

qq_62122428的博客 1047

[Java基础]Java中字符串string属于什么数据类型?

1.时间:2017-07-03 08:01:47 YuanMxy 2.问题描述:Java中字符串string属于什么数据类型? 3.问题解答: (1)首先给出数据类型的分类 (2)Java数据类型在内存中的存储: 1)基本数据类型的存储原理:所有的简单数据类型不存在“引用”的概念,基本数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面,而Java语言里面八种数...

YuanMxy'Home 1万+
上一篇: 【Java数据类型】运算符及其优先级详解
下一篇: 【Java数据类型】“字符串”全解之“StringBuffer类和StringBuilder类”
ALGO阿狗
博客等级 码龄9年 64粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值