java字符串超详解

目录

1. API

1.1 API 概述

2. String

2.1 String概述

2.2 String 构造方法

2.3 String对象的特点

2.4 字符串的比较

2.5 String中的方法

3. StringBuilder

3.1 StringBuilder 概述

3.2 StringBuilder 的构造方法

 3.3 StringBuilder 的添加和反转

3.4 StringBuilder 和 String 相互转换

 3.5 StringBuilder 中的方法

1. API

1.1 API 概述

API(Application Programming Interface): 应用程序编程接口。是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

JavaAPI:指的就是JDK中提供的各种功能的Java类这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现

2. String

2.1 String概述

String类代表字符串。java程序中的所有字符串文字(例如"abc")都被实现为此类的实例。

Java 程序中所有的双引号字符串,都是String 类的对象

String类在java.lang 包下,所以使用的时候不需要导包

字符串的特点:

  • 字符串不可变,它们的值在创建后不能被更改
  • 虽然String的值是不可变的,但是它们可以被共享
  • 字符串效果上相当于字符数组(char[]),但是底层原理是字节数组( byte[]) (JDK8及以前是字符数组,JDK9及以后是字节数组)

2.2 String 构造方法

方法名说明
public String()创建一个空白字符串对象,不含有任何内容
public String(char[] chs)根据字符数组的内容,来创建字符串对象
public String(byte[] bys)根据字节数组的内容,来创建字符里对象
String s = “abc"直接赋值的方式创建字符用对象,内容就是abc

例如:

public class Demo05 {public static void main(String[] args) {// public String() 创建一个空白字符串对象,不含有任何内容String s1 = new String();System.out.println("s1:" + s1); // 无内容// public String(char[] chs) 根据字符数组的内容,来创建字符串对象char[] c = { 'a', 'b', 'c' };String s2 = new String(c);System.out.println("s2:" + s2);// abc// public String(byte[] bys) 根据字节数组的内容,来创建字符里对象byte[] b = { 97, 98, 99 };String s3 = new String(b);// 97 98 99对应的底层字符分别为a b c 。// a b c 三个字符在计算机底层存储的是数据分别为97 98 99的值System.out.println("s3:" + s3);// abc// String s = “abc" 直接赋值的方式创建字符用对象,内容就是abcString s4 = "abc";System.out.println("s4:" + s4);// abc}
}

结果:

2.3 String对象的特点

1.通过new 创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同。

char[] chs ={'a','b','c'};
String s1 = new String(chs);
String s2 = new String(chs);

上面的代码中,JVM会首先创建一个字符数组,然后每一次new的时候都会有一个新的地址,只不过s1和s2参考的字符串内容是相同的

2.以" "方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次JVM 都只会建立一个String 对象,并在字符串池中维护

String s3 = "abc";
String s4 = "abc";

在上面的代码中,针对第一行代码,JVM 会建立一个String对象放在字符串池中,并给s3参考,第二行则让s4直接参考字符串池中的String对象,也就是说它们本质上是同一个对象

2.4 字符串的比较

使用==做比较
基本类型:比较的是数据值是否相同

引用类型:比较的是地址值是否相同

字符串是对象,它比较内容是否相同,是通过一个方法来实现的,equals()

public boolean equals(0bject anObject): 将此字符串与指定对象进行比较。由于我们比较的是字符串对象,所以参数直接传递一个字符串

例如:

public class Demo07 {public static void main(String[] args) {char[] c = { 'a', 'b', 'c' };String s1 = new String(c);String s2 = new String(c);String s3 = "abc";String s4 = "abc";System.out.println(s1 == s2);System.out.println(s1 == s3);System.out.println(s3 == s4);System.out.println("---------");System.out.println(s1.equals(s2));System.out.println(s1.equals(s3));System.out.println(s3.equals(s4));}
}

结果:

例2:遍历字符串

public char charAt(int index): 返回指定索处的char值,字符串的索引也是从0开始的

遍历字符串,其次要能够获取到字符串的长度

public int length(): 返回此字符串的长度

数组的长度:数组名.length
字符串的长度:字符串对象.length()

 

import java.util.Scanner;public class Demo10 {public static void main(String[] args) {System.out.println("输入字符串");Scanner sc = new Scanner(System.in);String line = sc.next();// 获取字符串的每一个字符for (int i = 0; i < line.length(); i++) {System.out.print(line.charAt(i) + " ");}}
}

结果:

 例3:统计字符次数

import java.util.Scanner;public class Demo06 {public static void main(String[] args) {System.out.println("输入字符串");Scanner sc = new Scanner(System.in);String line = sc.next();int a = 0;int b = 0;int c = 0;for (int i = 0; i < line.length(); i++) {if (line.charAt(i) >= '0' && line.charAt(i) <= '9') {a++;} else if (line.charAt(i) >= 'a' && line.charAt(i) <= 'z') {b++;} else if (line.charAt(i) >= 'A' && line.charAt(i) <= 'Z') {c++;}}System.out.println("数字有" + a + "位");System.out.println("小写字母有" + b + "位");System.out.println("大写字母有" + c + "位");}
}

结果:

 例4:拼接字符串

public class Demo08 {public static void main(String[] args) {int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };ToString(arr);}public static void ToString(int[] arr) {System.out.print("[");for (int i = 0; i < arr.length; i++) {if (i == arr.length - 1) {System.out.print(arr[i]);} else {System.out.print(arr[i] + ",");}}System.out.println("]");}
}

结果:

 例5:字符串反转

import java.util.Scanner;public class Demo09 {public static void main(String[] args) {System.out.println("输入字符串");Scanner sc = new Scanner(System.in);String s = sc.next();for (int i = s.length() - 1; i >= 0; i--) {System.out.print(s.charAt(i)+" ");}}
}

结果:

2.5 String中的方法

方法名说明
public boolean equals(Object anObject)比较字符串的内容,严格区分大小写(用户名和密码)
public char charAt(int index)返回指定索引处的 char 值
public int length()返回此字符串的长度

3. StringBuilder

3.1 StringBuilder 概述

如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费内存空间,而这种操作还不可避免。那么有没有一种比较好的方式可以解决这个问题呢?答察是肯定的,我们可以通过Java 提供的StringBuilder 类就来解决这个问题。

StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器这里的可变指的是StringBuilder对象中的内容是可变的。

String 和 StringBuilder 的区别

  • String:内容是不可变的
  • StringBuilder:内容是可变的

3.2 StringBuilder 的构造方法

方法名说明
public StringBuilder()创建一个空白可变字符串对象,不含有任何内容
public StringBuilder(String str)根据字符串的内容,来创建可变字符串对象

 例如:

public class Demo11 {public static void main(String[] args) {// public StringBuilder() 创建一个空白可变字符串对象,不含有任何内容StringBuilder s = new StringBuilder();System.out.println("s:" + s);System.out.println("s.length()" + s.length());// 长度// public StringBuilder(String str) 根据字符串的内容,来创建可变字符串对象StringBuilder s1 = new StringBuilder("abc");System.out.println("s1:" + s1);System.out.println("s1.length()" + s1.length());// 长度}
}

结果:

 3.3 StringBuilder 的添加和反转

方法名说明
public StringBuilder append(任意类型)添加数据,并返回对象本身
public StringBuilder reverse()返回相反的字符序列

例如:

public class Demo12 {public static void main(String[] args) {// public StringBuilder append(任意类型) 添加数据,并返回对象本身StringBuilder s = new StringBuilder();StringBuilder ss = new StringBuilder();// StringBuilder s2 = s.append("abcd");// System.out.println("s:" + s);// System.out.println("s2:" + s2);//s2:abcd// System.out.println("--------");s.append("abc");s.append("def");s.append("ghi");s.append(123456);System.out.println(s);System.out.println("--------");// 链式编程ss.append("abc").append("def").append("ghi").append(123456);System.out.println(ss);System.out.println("-----------");// public StringBuilder reverse() 返回相反的字符序列s.reverse();ss.reverse();System.out.println(s);System.out.println(ss);}
}

结果:

3.4 StringBuilder 和 String 相互转换

1.StringBuilder转换为 String
public String toString():通过toString()就可以实现把StringBuilder转换为String
2.String 转换为 StringBuilder:

public StringBuilder(String s): 通过构造方法就可以实现把 String转换为StringBuilder

例如:

public class Demo14 {public static void main(String[] args) {// 1.StringBuilder转换为 StringStringBuilder s = new StringBuilder();s.append("hello");String st = s.toString();System.out.println(st);// 2.String 转换为 StringBuilder:String st2 = "hello123";StringBuilder s2 = new StringBuilder(st2);System.out.println(s2);}
}

结果:

 例1:拼接字符串

public class Demo15 {public static void main(String[] args) {int[] arr = { 1, 2, 3 };String s = ToStirng(arr);System.out.println(s);}public static String ToStirng(int[] arr) {StringBuilder sb = new StringBuilder();sb.append("[");for (int i = 0; i < arr.length; i++) {if (i == arr.length - 1) {sb.append(arr[i]);} else {sb.append(arr[i]).append(",");}}sb.append("]");String s = sb.toString();return s;}
}

结果:

例2:字符串反转

public class Demo13 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("输入字符串");String line = sc.next();String s = info(line);System.out.println(s);}public static String info(String s) {// StringBuilder sb=new StringBuilder();// sb.reverse();// String ss = sb.toString();// return ss;return new StringBuilder(s).reverse().toString();}
}

结果:

 3.5 StringBuilder 中的方法

方法名说明
public StringBuilder append(任意类型)添加数据,并返回对象本身
public StringBuilder reverse()返回相反的字符序列
public String toString()通过toString()就可以实现把StringBuilder转换为String

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

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

相关文章

区块链实验室(14) - 编译FISCO-BCOS

FISCO-BCOS是一种区块链平台&#xff0c;与Hyperledger和Ethereum有些不同&#xff0c;详见FISCO BCOS 区块链 编译FISCO BCOS源码的目的是修改或者新增其中功能模块&#xff0c;进行对比实验&#xff0c;验证新想法、新创意的效果。编译的步骤很简单&#xff0c;按技术文档一…

Linux修改系统语言

sudo dpkg-reconfigure locales 按pagedown键&#xff0c;移动红色光标到 zh_CN.UTF-8 UTF-8&#xff0c;空格标记*号&#xff08;没标记下一页没有这一项&#xff09;&#xff0c;回车。 下一页选择 zh_CN.UTF-8。 如果找不到 dpkg-reconfigure whereis dpkg-reconfigure …

【C++】继承的概念和简单介绍、基类和派生类对象复制转换、继承中的作用域、派生类的默认成员函数

文章目录 继承1.继承的概念和简单介绍1.1继承的概念1.2继承的定义 2.基类和派生类对象复制转换3.继承中的作用域4.派生类的默认成员函数5.继承与友元6.继承与静态成员 继承 1.继承的概念和简单介绍 1.1继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最…

Spring Boot 系列4 -- 统一功能处理

目录 前言 1. Spring AOP 用户统⼀登录验证的问题 1.1 自定义拦截器 1.2 配置拦截器并配置拦截的规则 1.3 拦截器的原理源码分析 2. 统一异常处理 2.1 实现统一异常处理 2.2 测试统一异常处理 3. 统一的数据格式返回 3.1 统⼀数据返回格式的实现 3.2 测试统一的数据返…

QT 使用单例模式

目录 1. 单例模式介绍 2.单例模式实现 1. 单例模式介绍 有些时候我们在做 qt 项目的时候,要用到很多类. 例如我们用到的类有 A,B,C,D. 其中,A 是 B,C,D 中都需要用到的类,A 类非常的抢手. 但是,A 类非常的占内存,定义一个 A 对象需要 500M 内存,假如在 B,C,D 中都定义一个 A 类…

浏览器不同源的页面之间如何跨域通信

目录 1&#xff0c;需求2&#xff0c;难点3&#xff0c;思路浏览器不同源的页面之间如何跨域通信&#xff1f; 4&#xff0c;实现第1版第2版最终版其他的问题1&#xff0c;页面路径需完全一致。2&#xff0c;事件注册问题 1&#xff0c;需求 现在有2个项目&#xff0c;页面路径…

Xilinx A7开发板LVDS IO无输出问题解决方法

使用A7-35T FGG484的FPGA开发板bank16上的IO作为差分LVDS的输入输出&#xff0c;搭建输入输出测试工程发现LVDS可以输入、无法输出。查阅UG471&#xff0c;找到如下信息&#xff1a; 手册中已经针对A7的LVDS做了明确的应用说明&#xff1a; &#xff08;1&#xff09;HP bank上…

数组的学习

数组学习 文章目录 数组来由数组的使用数组的内存图变量声明和args参数说明声明分配空间值的省略写法数组的length属性数列输出求和判断购物金额结算Arrays的sort和toString方法Arrays的equals和fill和copyOf和binarySearch方法字符数组顺序和逆序输出 数组来由 录入30个学生…

telnet检验网络能不能通

telnet检测网络能不能通&#xff08;ip地址端口号&#xff09;

阿里云平台WoSignSSL证书应用案例

沃通CA与阿里云达成合作并在阿里云平台上线WoSign品牌SSL证书。自上线以来&#xff0c;WoSignSSL证书成为阿里云“数字证书管理服务”热销证书产品&#xff0c;获得阿里云平台客户认可&#xff0c;助力阿里云平台政府、金融、教育、供应链、游戏等各类行业客户实现网站系统数据…

利用OpenCV实现图像拼接

一、介绍 图像拼接. 二、分步实现 要实现图像拼接&#xff0c;简单来说有以下几步&#xff1a; 对每幅图进行特征点提取对对特征点进行匹配进行图像配准把图像拷贝到另一幅图像的特定位置对重叠边界进行特殊处理 PS&#xff1a;需要使用低版本的opencv&#xff0c;否则无法使…

扩散模型实战(二):扩散模型的发展

推荐阅读列表&#xff1a; 扩散模型实战&#xff08;一&#xff09;&#xff1a;基本原理介绍 扩散模型从最初的简单图像生成模型&#xff0c;逐步发展到替代原有的图像生成模型&#xff0c;直到如今开启 AI 作画的时代&#xff0c;发展速度可谓惊人。下面介绍一下2D图像生成相…