[07] String字符串
1、相同又不同的字符串
String str1 = new String("String");
String str2 = "String";
String str3 = "String";
System.out.println(str2 == str1); //false
System.out.println(str2 == str3); //true
String str1 = new String("String");
String str2 = "String";
String str3 = "String";
System.out.println(str2 == str1); //false
System.out.println(str2 == str3); //true
- 为字符串开辟一个字符串常量池,类似于缓存区
- 创建字符串常量时,首先坚持字符串常量池是否存在该字符串
- 存在该字符串,返回引用实例,不存在,实例化该字符串并放入池中
String str = new String(“abc”) 创建多少个对象?
//所以,如果常量池中没有"abc",则创建了2个对象,一个放在常量池,一个放在堆;否则创建一个对象和一个引用
String str = new String(“abc”) 创建多少个对象?
//所以,如果常量池中没有"abc",则创建了2个对象,一个放在常量池,一个放在堆;否则创建一个对象和一个引用
String str1 = new String("A"+"B") ; 会创建多少个对象?
str1:
字符串常量池:"A","B","AB" : 3个
堆:new String("AB") :1个
引用: str1 :1个
总共 : 5个
String str1 = new String("A"+"B") ; 会创建多少个对象?
str1:
字符串常量池:"A","B","AB" : 3个
堆:new String("AB") :1个
引用: str1 :1个
总共 : 5个
- 单独使用""引号创建的字符串都是常量,编译期(保存在.class文件中)就已经确定存储到常量池中
- 使用new String("")创建的对象会存储在堆中,是运行期新创建的
- 使用只包含常量的字符串连接符如"aa" + "aa"创建的也是常量,编译期就能确定,已经确定存储到常量池中
- 使用包含变量的字符串连接符如"aa" + str1创建的对象是运行期才创建的,存储在堆中
- 字符串本质上是不可变的(所谓的字符串连接无非是新建字符串,更改指向,而不是修改原有),不用担心数据冲突进行共享
- 运行时实例创建的全局字符串常量池中有一个表,总是为池中每个唯一的字符串对象维护一个引用,这就意味着它们一直引用着字符串常量池中的对象,所以,在常量池中的这些字符串不会被垃圾收集器回收
2、常用方法
2.1 String常用方法
返回长度
length() //返回字符串的长度
转换(替换)字符
toLowerCase() //转换字符串为小写(仅针对字符串中的字母进行变化)
toUpperCase() //转换字符串为大写(仅针对字符串中的字母进行变化)
repalce(char oldChar, char newChar) // 将字符串中所有oldChar字符替换为newChar字符 字符串函数替换后需要赋值给新的字符串,旧字符串不会改变也不会重新指向新字符串
repalceFirst(String regex, String replacement) // 用字符串replacement的内容替换当前字符串中遇到的第一个和字符串regex一致的子串,并返回新的字符串(字符串长度可以不同,不会顶替掉未要求替换的字符)
repalceAll(String regex, String replacement) // 用字符串replacement的内容替换当前字符串中遇所有和字符串regex一致的子串,并返回新的字符串(字符串长度可以不同,不会顶替掉未要求替换的字符)
valueOf(Object obj) //将某个对象的实例转换成字符串 return:if the argument is null, then a string equal to "null"; otherwise, the value of obj.toString() is returned. (而对于基本数据类型,如int 1,则会转成"1")
提取字符
charAt(int index) //返回字符串的第index个位置的字符
substring(int beginindex) //返回从beginindex位置(包括该位置)开始到结尾的所有字符
substring(int beginindex, int endindex) //返回从beginindex位置(包括)开始到endindex(不包括)的所有字符
比较字符
compareTo(String anotherString) //字符串比较,返回值为前者减后者的二者差(两个字符串同时从左往右比对,差值为首个不同字符的ASCII码的差值,数字字符为ASCII码相减)两个字符串完全相同输出为0
equals(Object anObject) //比较两个字符串的内容是否相同(大小写敏感),是则返回true,否则返回false
equalsIgnoreCase(String anotherString) //比较两个字符串的内容是否相同(忽略大小写),是则返回true,否则返回false
regionMatches(int toffset, String other, int ooffset, int len) //比较本串从toffset(包含)开始的len个字符和other串从ooffset开始的len个字符是否一致,返回值为boolean型
starstWith(String prefix) //比较字符串是否以prefix开始,返回值为boolean型
endsWith(String suffix) //比较字符串是否以suffix结束,返回值为boolean型
matches(String reg) //某字符串是否匹配reg正则表达式
查找字符位置
indexOf(int ch) //返回某个字符在本字符串中第一次出现的位置,没有找到就输出-1
indexOf(String str) //返回某个字符串在本字符串中第一次出现的位置,没有找到就输出-1
indexOf(int ch, int fromIndex) //返回某个字符在字符串中从fromindex位置开始查找的第一次出现的位置,没有找到就输出-1
indexOf(String str, int fromIndex) //返回某个字符串在字符串中从fromindex位置开始查找的第一次出现的位置,没有找到就输出-1
lastIndexOf(int ch) //返回某个字符在本字符串中最后一次出现的位置,没有找到就输出-1
lastIndexOf(String str) //返回某个字符串在本字符串中最后一次出现的位置,没有找到就输出-1
lastIndexOf(int ch, int fromIndex) //返回某个字符在字符串中到fromindex位置开始查找的最后一次出现的位置,没有找到就输出-1
lastIndexOf(String str, int fromIndex) //返回某个字符串在字符串中到fromindex位置开始查找的最后一次出现的位置,没有找到就输出-1
contains(CharSequence s) //是否包含某个字符
连接字符串
concat(String str) //将参数中的字符串str连接到原字符串的后面
去掉空格
trim() //去掉字符串开头和结尾的空格并返回新字符串,注意,中间的空格不会去掉
返回长度
length() //返回字符串的长度
转换(替换)字符
toLowerCase() //转换字符串为小写(仅针对字符串中的字母进行变化)
toUpperCase() //转换字符串为大写(仅针对字符串中的字母进行变化)
repalce(char oldChar, char newChar) // 将字符串中所有oldChar字符替换为newChar字符 字符串函数替换后需要赋值给新的字符串,旧字符串不会改变也不会重新指向新字符串
repalceFirst(String regex, String replacement) // 用字符串replacement的内容替换当前字符串中遇到的第一个和字符串regex一致的子串,并返回新的字符串(字符串长度可以不同,不会顶替掉未要求替换的字符)
repalceAll(String regex, String replacement) // 用字符串replacement的内容替换当前字符串中遇所有和字符串regex一致的子串,并返回新的字符串(字符串长度可以不同,不会顶替掉未要求替换的字符)
valueOf(Object obj) //将某个对象的实例转换成字符串 return:if the argument is null, then a string equal to "null"; otherwise, the value of obj.toString() is returned. (而对于基本数据类型,如int 1,则会转成"1")
提取字符
charAt(int index) //返回字符串的第index个位置的字符
substring(int beginindex) //返回从beginindex位置(包括该位置)开始到结尾的所有字符
substring(int beginindex, int endindex) //返回从beginindex位置(包括)开始到endindex(不包括)的所有字符
比较字符
compareTo(String anotherString) //字符串比较,返回值为前者减后者的二者差(两个字符串同时从左往右比对,差值为首个不同字符的ASCII码的差值,数字字符为ASCII码相减)两个字符串完全相同输出为0
equals(Object anObject) //比较两个字符串的内容是否相同(大小写敏感),是则返回true,否则返回false
equalsIgnoreCase(String anotherString) //比较两个字符串的内容是否相同(忽略大小写),是则返回true,否则返回false
regionMatches(int toffset, String other, int ooffset, int len) //比较本串从toffset(包含)开始的len个字符和other串从ooffset开始的len个字符是否一致,返回值为boolean型
starstWith(String prefix) //比较字符串是否以prefix开始,返回值为boolean型
endsWith(String suffix) //比较字符串是否以suffix结束,返回值为boolean型
matches(String reg) //某字符串是否匹配reg正则表达式
查找字符位置
indexOf(int ch) //返回某个字符在本字符串中第一次出现的位置,没有找到就输出-1
indexOf(String str) //返回某个字符串在本字符串中第一次出现的位置,没有找到就输出-1
indexOf(int ch, int fromIndex) //返回某个字符在字符串中从fromindex位置开始查找的第一次出现的位置,没有找到就输出-1
indexOf(String str, int fromIndex) //返回某个字符串在字符串中从fromindex位置开始查找的第一次出现的位置,没有找到就输出-1
lastIndexOf(int ch) //返回某个字符在本字符串中最后一次出现的位置,没有找到就输出-1
lastIndexOf(String str) //返回某个字符串在本字符串中最后一次出现的位置,没有找到就输出-1
lastIndexOf(int ch, int fromIndex) //返回某个字符在字符串中到fromindex位置开始查找的最后一次出现的位置,没有找到就输出-1
lastIndexOf(String str, int fromIndex) //返回某个字符串在字符串中到fromindex位置开始查找的最后一次出现的位置,没有找到就输出-1
contains(CharSequence s) //是否包含某个字符
连接字符串
concat(String str) //将参数中的字符串str连接到原字符串的后面
去掉空格
trim() //去掉字符串开头和结尾的空格并返回新字符串,注意,中间的空格不会去掉
2.2 String的format
public static void main(String[] args) {
String str=null;
str=String.format("Hi,%s", "王力");
System.out.println(str);
str=String.format("Hi,%s:%s.%s", "王南","王力","王张");
System.out.println(str);
System.out.printf("字母a的大写是:%c %n", 'A');
System.out.printf("3>7的结果是:%b %n", 3>7);
System.out.printf("100的一半是:%d %n", 100/2);
System.out.printf("100的16进制数是:%x %n", 100);
System.out.printf("100的8进制数是:%o %n", 100);
System.out.printf("50元的书打8.5折扣是:%f 元%n", 50*0.85);
System.out.printf("上面价格的16进制数是:%a %n", 50*0.85);
System.out.printf("上面价格的指数表示:%e %n", 50*0.85);
System.out.printf("上面价格的指数和浮点数结果的长度较短的是:%g %n", 50*0.85);
System.out.printf("上面的折扣是%d%% %n", 85);
System.out.printf("字母A的散列码是:%h %n", 'A');
}
public static void main(String[] args) {
String str=null;
str=String.format("Hi,%s", "王力");
System.out.println(str);
str=String.format("Hi,%s:%s.%s", "王南","王力","王张");
System.out.println(str);
System.out.printf("字母a的大写是:%c %n", 'A');
System.out.printf("3>7的结果是:%b %n", 3>7);
System.out.printf("100的一半是:%d %n", 100/2);
System.out.printf("100的16进制数是:%x %n", 100);
System.out.printf("100的8进制数是:%o %n", 100);
System.out.printf("50元的书打8.5折扣是:%f 元%n", 50*0.85);
System.out.printf("上面价格的16进制数是:%a %n", 50*0.85);
System.out.printf("上面价格的指数表示:%e %n", 50*0.85);
System.out.printf("上面价格的指数和浮点数结果的长度较短的是:%g %n", 50*0.85);
System.out.printf("上面的折扣是%d%% %n", 85);
System.out.printf("字母A的散列码是:%h %n", 'A');
}
Hi,王力
Hi,王南:王力.王张
字母a的大写是:A
3>7的结果是:false
100的一半是:50
100的16进制数是:64
100的8进制数是:144
50元的书打8.5折扣是:42.500000 元
上面价格的16进制数是:0x1.54p5
上面价格的指数表示:4.250000e+01
上面价格的指数和浮点数结果的长度较短的是:42.5000
上面的折扣是85%
字母A的散列码是:41
Hi,王力
Hi,王南:王力.王张
字母a的大写是:A
3>7的结果是:false
100的一半是:50
100的16进制数是:64
100的8进制数是:144
50元的书打8.5折扣是:42.500000 元
上面价格的16进制数是:0x1.54p5
上面价格的指数表示:4.250000e+01
上面价格的指数和浮点数结果的长度较短的是:42.5000
上面的折扣是85%
字母A的散列码是:41
转换符 | 说明 | e.g. |
%s | 字符串类型 | "mingrisoft " |
%c | 字符类型 | 'm' |
%b | 布尔类型 | true |
%d | 整数类型(十进制) | 99 |
%x | 整数类型(十六进制) | FF |
%o | 整数类型(八进制) | 77 |
%f | 浮点类型 | 99.99 |
%a | 浮点类型(十六进制) | FF.35AE |
%e | 指数类型 | 9.38e+5 |
%g | 通用浮点类型 | |
%h | 散列码 | |
%% | 百分比类型 | |
%n | 换行符 | |
%tx | 日期与时间类型 |
2.3 String的spilt
- separator 必填,分隔符,支持正则表达式
- limit 可选,该值用来限制返回数组中元素的个数
- 如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split(".");
- 如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|"); “.”和“|”都是转义字符,必须得加"\\";
- 如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“a=1 and b =2 or c=3”,把三个都分隔出来,可以用String.split("and|or");
2.4 String和char[]
//将当前字符串中一部分复制到指定参数dst数组中去,并从dstBegin处开始存放
void getChars(int srcBegni, int srcEnd, char[] dst, int dstBegin)
//初始化一个字符数组,长度和字符串长度相等
char[] toCharArray()
//将当前字符串中一部分复制到指定参数dst数组中去,并从dstBegin处开始存放
void getChars(int srcBegni, int srcEnd, char[] dst, int dstBegin)
//初始化一个字符数组,长度和字符串长度相等
char[] toCharArray()
String(char[] value)
String(char[] value, int offset, int count)
String(char[] value)
String(char[] value, int offset, int count)
3、StringBuffer和StringBuilder
- StringBuffer在一个时候只能让一个线程去访问它,线程安全
- StringBuilder是非线程安全的,所以单线程的话,StringBuilder的速度更快
[07] String字符串的更多相关文章
- [18/12/07]String 字符串
一.基础概念 1. String类又称作不可变字符序列. 2. String位于java.lang包中,Java程序默认导入java.lang包下的所有类. 3. Java字符串就是Unicode字符 ...
- Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0
课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值 String str=& ...
- [CareerCup] 1.3 Permutation String 字符串的排列
1.3 Given two strings, write a method to decide if one is a permutation of the other. 这道题给定我们两个字符串,让 ...
- 03-Java String字符串详解
1.Java字符串String A.实例化String字符串:直接赋值(更合理一些,使用较多).使用关键字new. B.String内容的比较 // TODO Auto-generated metho ...
- C++学习38 string字符串的增删改查
C++ 提供的 string 类包含了若干实用的成员函数,大大方便了字符串的增加.删除.更改.查询等操作. 插入字符串 insert() 函数可以在 string 字符串中指定的位置插入另一个字符串, ...
- C++学习37 string字符串的访问和拼接
访问字符串中的字符 string 字符串也可以像字符串数组一样按照下标来访问其中的每一个字符.string 字符串的起始下标仍是从 0 开始.请看下面的代码: #include <iostrea ...
- java String字符串——进度1
String字符串 在JAVA中提供了多种创建字符串对象的方法,这里介绍最简单的两种, 第一种是直接赋值, 第二种是使用String类的构造方法: 如下所示: Strin ...
- 关于String字符串反转
这是网上看到的一篇java面试题中的问题: 问题是: 如何将一个String字符串反转. String str = "1234567"; int length = str.leng ...
- JavaScript的内置对象(Date日期+string字符串)基础语法总结
1.Date日期对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒). 1)定义一个时间对象 : var Udate=new Date(); //注意:使用关键字new,Date()的首 ...
随机推荐
- 设计模式(8)--Decorator--装饰器模式--结构型
1.模式定义: 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 2.模式特点: 装饰模式能够实现动态的为对象添加功能,是从一个对象 ...
- WeQuant交易策略—KDJ
KDJ随机指标策略策略介绍KDJ指标又叫随机指标,是一种相当新颖.实用的技术分析指标,它起先用于期货市场的分析,后被广泛用于股市的中短期趋势分析,是期货和股票市场上最常用的技术分析工具.随机指标KDJ ...
- 简单sql注入学习
sql注入是什么? 所谓SQL注入,就是通过把SQL命令插入到Web表单提 交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQ ...
- C语言:freopen函数
当我们求解acm题目时,通常在设计好算法和程序后,要在调试环境(例如VC等)中运行程序,输入测试数据,当能得到正确运行结果后,才将程序提交到oj中.但由于调试往往不能一次成功,每次运行时,都要重新输入 ...
- 基于 HtmlHelper 的自定义扩展Container
基于 HtmlHelper 的自定义扩展Container Intro 基于 asp.net mvc 的权限控制系统的一部分,适用于对UI层数据呈现的控制,基于 HtmlHelper 的扩展组件 Co ...
- Ext.grid.CheckboxSelectionModel复选框设置某行不可以选中
var sm = new Ext.grid.CheckboxSelectionModel({ renderer:function(v,c,r){ if(r.get("isEdit" ...
- 对Appium的认识 get
介绍 Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持iOS.Android及FirefoxOS平台测试.Appium使用WebDriver的json w ...
- 《Java从入门到放弃》JavaSE入门篇:面向对象语法二(入门版)
想了半天,发现单独的封装和多态没什么好讲的,我们就简单说说Java里面对应的语法吧. 相关内容如下: 一.访问修饰符 二.getter/setter方法 三.构造方法 四.super和this 五.s ...
- 融会贯通——最常用的“合成复用原则”技能点Get
复用一个类的时候,多使用对象的组合/聚合的关联关系,而不是继承. 之前提到的"依赖倒转原则",是以里氏代换原则为基础的实现开闭原则目标的手段,这一条路线涉及到的是类的继承(包括单继 ...
- JAVA实用案例之文件导入导出(POI方式)
1.介绍 java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下. 目前我所接触过的导入导出技术主要有POI和iRepo ...