热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

String部分

String字符串java.lang;基本标识Java字符串的一个重要特点就是字符串不可变。finalclassString没有子类字符串字面量也是一个String类的实例存储在字

String
字符串
java.lang ;基本标识
Java字符串的一个重要特点就是字符串不可变。
final class String 没有子类
字符串字面量也是一个String类的实例
存储在字符串常量池中,相同的字符串字面量表示的对象在内存中只有一份。

字符串String类型本身是final声明的,
意味着我们不能继承String,也就意味着我们不能去重写他的方法。
jdk8 private final char value[];
String 不可变对象
jdk9 final byte[] value;

构建
“” 引号构建,还有+
构造器的方式
String s1 = new String("你好");

字符数组构建(不好用,先建立字符数组,然后转换,吐槽,辣鸡A_A,优点是可以选择性的选择需要的字符进行转换)

一些常用的方法

常见的
boolean isEmpty():字符串是否为空
int length():返回字符串的长度
String concat(xx):拼接,等价于+
boolean equals(Object obj):比较字符串是否相等,区分大小写
boolean equalsIgnoreCase(Object obj):比较字符串是否相等,区分大小写
int compareTo(String other):比较字符串大小,区分大小写,按照Unicode编码值比较大小
int compareToIgnoreCase(String other):比较字符串大小,不区分大小写
String toLowerCase():将字符串中大写字母转为小写
String toUpperCase():将字符串中小写字母转为大写
String trim():去掉字符串前后空白符
查找的
boolean contains(xx):是否包含xx,一个大串中是否含有xx这个小的
int indexOf(xx):从前往后找当前字符串中xx,即如果有返回第一次出现的下标,要是没有返回-1
int lastIndexOf(xx):从后往前找当前字符串中xx,即如果有返回最后一次出现的下标,要是没有返回-1
字符串截取
String substring(int beginIndex) :返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。截取长度为( beginIndex , 数组最后一个字符 )
String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。
字符相关
char charAt(index):返回[index]位置的字符
char[] toCharArray(): 将此字符串转换为一个新的字符数组返回
String(char[] value):返回指定数组中表示该字符序列的 String。
String(char[] value, int offset, int count):返回指定数组中表示该字符序列的 String。
static String copyValueOf(char[] data): 返回指定数组中表示该字符序列的 String
static String copyValueOf(char[] data, int offset, int count):返回指定数组中表示该字符序列的 String
static String valueOf(char[] data, int offset, int count) : 返回指定数组中表示该字符序列的 String
static String valueOf(char[] data) :返回指定数组中表示该字符序列的 String
getBytes()
首尾
boolean startsWith(xx):是否以xx开头
boolean endsWith(xx):是否以xx结尾
正则(基本上爬虫那些,但是不太会涉及贪婪和非贪婪)
正则表达式:
文本校验
正则是一门独立的语言 与java是兄弟关系
[]匹配单个字符
[AB] 可以匹配A , B
[A-Z]
[a-z]
[A-z]
\w: 字母数字下划线
\d: 所有的数字
?:0次或1次
*: 0次或多次
+: 1次或多次{
n}: 重复n次
{n,m}: 重复[n,m]次
{n,}: 至少重复n次
^:
[^BC]:只要不是BC就可以
^A:以A开头
$: 以xxx结尾
替换
String replace(xx,xx):不支持正则
String replaceFirst(正则,value):替换第一个匹配部分
String repalceAll(正则, value):替换所有匹配部分
拆分
String[] split(正则):按照某种规则进行拆分

字符串对象的内存分析
字符串拼接
如果是 常量+常量 结果是字符串常量
如果是 变量+变量 结果是创建一个StringBuilder对象 对字符串内容进行拼接
如果是 变量+常量 结果是创建一个StringBuilder对象 对字符串内容进行拼接
拓展:
intern():
1.查看常量池内是否有此结果 有直接返回常量池的地址
2.如果没有将此内容放到常量池 再返回常量池结果



StringBuilder&StringBuffer
因为String对象是不可变对象,虽然可以共享常量对象,但是对于频繁字符串的修改和拼接操作,效率极低。因此,JDK又在java.lang包提供了可变字符序列StringBuilder和StringBuffer类型。
StringBuffer:
老的,线程安全的(因为它的方法有synchronized修饰),效率低
可变的字符序列
父亲 AbstractStringBuilder
底层采用 char[] 存储数据 默认长度为16

StringBuilder:
线程不安全的,效率高
可变的字符序列
父亲 AbstractStringBuilder
底层采用 char[] 存储数据 默认长度为16*
StringBuilder&StringBuffer区别:
StringBuffer 线程安全的 效率低
StringBuilder 线程不安全的 synchronized 效率高
两者通用方法
StringBuffer append(xx):拼接,追加
StringBuffer insert(int index, xx):在[index]位置插入xx
StringBuffer delete(int start, int end):删除[start,end)之间字符
StringBuffer deleteCharAt(int index):删除[index]位置字符
void setCharAt(int index, xx):替换[index]位置字符
StringBuffer reverse():反转
void setLength(int newLength) :设置当前字符序列长度为newLength
StringBuffer replace(int start, int end, String str):替换[start,end)范围的字符序列为str
int indexOf(String str):在当前字符序列中查询str的第一次出现下标
int indexOf(String str, int fromIndex):在当前字符序列[fromIndex,最后]中查询str的第一次出现下标
int lastIndexOf(String str):在当前字符序列中查询str的最后一次出现下标
int lastIndexOf(String str, int fromIndex):在当前字符序列[fromIndex,最后]中查询str的最后一次出现下标
String substring(int start):截取当前字符序列[start,最后]
String substring(int start, int end):截取当前字符序列[start,end)
String toString():返回此序列中数据的字符串表示形式

同上一份

抽空整理


推荐阅读
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 本文介绍如何使用 Python 计算两个时间戳之间的时间差,并将其转换为毫秒。示例代码展示了如何通过 `time` 和 `datetime` 模块实现这一功能。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 利用Cookie实现用户登录状态的持久化
    本文探讨了如何使用Cookie技术在Web应用中实现用户登录状态的持久化,包括Cookie的基本概念、优势及主要操作方法,并通过一个简单的Java Web项目示例展示了具体实现过程。 ... [详细]
  • 本文深入分析了在使用JavaScript中的Date.UTC()方法初始化Date对象时,getDay()方法返回值与预期不符的原因,并提供了相应的解决方案。 ... [详细]
  • 本文详细介绍了JavaScript中数组的转换方法、栈方法、队列方法、重排序方法及操作方法,包括toLocaleString()、toString()、valueOf()等基本转换方法,以及push()、pop()、shift()、unshift()等用于模拟栈和队列行为的方法。 ... [详细]
  • LoadRunner中的IP欺骗配置与实践
    为了确保服务器能够有效地区分不同的用户请求,避免多人使用同一IP地址造成的访问限制,可以通过配置IP欺骗来解决这一问题。本文将详细介绍IP欺骗的工作原理及其在LoadRunner中的具体配置步骤。 ... [详细]
  • 本文概述了在GNU/Linux系统中,动态库在链接和运行阶段的搜索路径及其指定方法,包括通过编译时参数、环境变量及系统配置文件等方式来控制动态库的查找路径。 ... [详细]
  • 使用REM和媒体查询实现响应式布局
    本文介绍如何利用REM单位和媒体查询(Media Queries)来创建适应不同屏幕尺寸的网页布局。通过具体示例,展示在不同屏幕宽度下如何调整页面元素的样式。 ... [详细]
  • SPFA算法详解与应用
    当图中包含负权边时,传统的最短路径算法如Dijkstra不再适用,而Bellman-Ford算法虽然能解决问题,但其时间复杂度过高。SPFA算法作为一种改进的Bellman-Ford算法,能够在多数情况下提供更高效的解决方案。本文将详细介绍SPFA算法的原理、实现步骤及其应用场景。 ... [详细]
  • 本文详细对比了HashMap和HashTable在多线程环境下的安全性、对null值的支持、性能表现以及方法同步等方面的特点,帮助开发者根据具体需求选择合适的数据结构。 ... [详细]
  • 神策数据分析基础
    本文介绍了基于用户行为的数据分析方法,包括业务问题的提出与定义、具体行为的识别及统计分析流程。同时,详细阐述了如何利用事件模型(Event Model)来描述用户行为,以及在实际应用中的案例分析。 ... [详细]
  • 2023年1月28日网络安全热点
    涵盖最新的网络安全动态,包括OpenSSH和WordPress的安全更新、VirtualBox提权漏洞、以及谷歌推出的新证书验证机制等内容。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 本文详细介绍了如何使用Rufus工具制作一个兼容UEFI启动模式的Windows Server 2008 R2安装U盘,包括必要的软件和步骤。 ... [详细]
author-avatar
cindy翻不清的旧伟_334
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有