0512String类
String类
2. String类
2.1 字符串类型概述
又爱又恨!!!
爱:
字符串基本上就是数据的保存,传输,处理非常重要的一种手段。
恨:
解析过程非常烦人,需要掌握熟记很多方法,同时需要有一定的技巧和灵性
String字符串类型是Java中引用数据类型,并且String类型是使用final修饰,没有自己的子类。
字符串的存储也是非常个性的一件事情,分两种情况,
一种是在内存的数据区
一种是在内存的堆区
字符串是一个常量!!!
字符串确定之后无法修改!!!
2.2 字符串内存分析和equals方法
package com.qfedu.b_string;
/*
* 字符串常量分析
*/
public class Demo1 {
public static void main(String[] args) {
String str1 = "烤羊排";
String str2 = "烤羊排";
String str3 = new String("烤羊排");
String str4 = new String(str1);
/*
* tfff
* == 等于判断是比较两个变量中保存的数据是否一致
* String str1 str2 str3 str4 都是引用数据类型的变量,也就是==判断比较的是
* str1 ~ str4 中保存的空间首地址
*/
System.out.println("str1 == str2 : " + (str1 == str2)); // true
System.out.println("str2 == str3 : " + (str2 == str3)); // false
System.out.println("str3 == str4 : " + (str3 == str4)); // false
System.out.println("str4 == str1 : " + (str4 == str1)); // false
System.out.println("----------------------------------------");
/*
* 字符串如何比较是否一致???
*
* Java中规定,字符串比较要求采用equals方法来完成,并且使用的equals方法是String类
* 重写Object类内的方法,比较方式是比较字符串内容。
*/
System.out.println("str1.equals(str2) : " + str1.equals(str2)); // true
System.out.println("str2.equals(str3) : " + str2.equals(str3)); // true
System.out.println("str3.equals(str4) : " + str3.equals(str4)); // true
System.out.println("str4.equals(str1) : " + str4.equals(str1)); // true
}
}
2.3 获取方法
int length();
获取字符串的长度
char charAt(int index);
从字符串中获取对应下标位置的字符,(存在下标越界问题)
int indexOf(char ch);
找出指定字符在当前字符串中的下标位置
"ABCDEFGABCDEFG"
查询 'E' ==> result 4
int indexOf(String str);
找出指定字符串在当前字符串中的下标位置
"ABCDEFGABCDEFG"
查询 "DE" ==> result 3
int lastIndexOf(char ch);
找出指定字符最后一次出现的下标位置
"ABCDABCD";
查询 'B' ==> result 5
int lastIndexOf(String str);
找出指定字符串最后一次出现的下标位置
"ABCDABCD";
查询 "CD" ==> result 6
package com.qfedu.b.string;
/**
* 字符串常量
*
* @author GGGXXC
*
*/
public class Demo1 {
public static void main(String[] args) {
String str1 = "烤羊排";
String str2 = "烤羊排";
String str3 = new String("烤羊排");
String str4 = new String(str1);
/**
* == 是判断两个变量中保存的数据是否一致,String是引用类型,其中存的是地址数据
* String str1 str2 str3 str4 中存的都是引用类型数据,== 判断的是四个变量中
* 存储的地址
*
*
* 双引号中的内容为【字符串常量】,而且在整个代码运行期间,相同内容的字符串常量有且只有一个,都在内存的数据区
* new String 的方法是在堆区创建空间,保存对应的字符串信息,并将该地址赋给引用数据类型变量
*/
System.out.println("str1 == str2 : " + (str1 == str2)); //true
/*
* 此处不可写成("str2 == str3 : " + str2 == str3);
* 丢失括号将会使先让字符串和str2相连,再个str3进行比较
*/System.out.println("str2 == str3 : " + (str2 == str3)); //false;
System.out.println("str3 == str4 : " + (str3 == str4)); //false;
System.out.println("str4 == str1 : " + (str4 == str1)); //false;
System.out.println("-------------------------------------");
/**
* 字符串怎样比较内容是否一致?
* Java中规定,字符串常量的比较要用equals进行比较,并且使用的equals方法是String类重写的Object类的
* 方法,比较方式是比较字符串内容。
*
* Object的 equals比较的是两个对象的地址是否一致
* String类型重写了Object的equals方法
*
* 【??重点标记】
*/
System.out.println("str1.equals(str2): " + str1.equals(str2));
System.out.println("str2.equals(str3): " + str2.equals(str3));
System.out.println("str3.equals(str4): " + str3.equals(str4));
System.out.println("str4.equals(str1): " + str4.equals(str1));
}
}
2.4 判断方法
boolean endsWith(String str);
判断当前字符串是不是指定字符串结尾,如果是返回true,不是返回false
boolean startsWith(String str);
判断当前字符串是不是指定字符串开始,如果是返回true,不是返回false
boolean isEmpty();
判断当前字符串是否为空,空字符串是指 "" 双引号什么都没有
boolean contains(String str) 是否包含指定序列 应用:搜索
判断该指定字符串是否是当前字符串的子字符串。
当前字符串:
"ABCDEFG";
参数字符串:
"CDE"; ==> result true;
参数字符串:
"CE"; ==> result false
原码是调用String类的indexOf方法,找出指定字符串的下标位置,indexOf方法下标为大于等于0,返回 true,否则返回 false
boolean equals(Object anObject);
重写 Override Object类内方法,判断两个字符串是否一致。
boolean equalsIgnoreCase(String anotherString);
忽略大小写是否相等,不考虑英文大小写方式比较两个字符串是否一致。
package com.qfedu.b_string;
/*
* 判断方法
*/
public class Demo3 {
public static void main(String[] args) {
String str = "ABCDEFGABCDEFG";
// endsWith方法
System.out.println("str.endsWith(\"FG\") : " + str.endsWith("FG"));
System.out.println("str.endsWith(\"FG\") : " + str.endsWith("GF"));
// startsWith方法
System.out.println("str.startsWith(\"AB\") : " + str.startsWith("AB"));
System.out.println("str.startsWith(\"BA\") : " + str.startsWith("BA"));
// isEmpty方法
System.out.println("str.isEmpty() : " + str.isEmpty());
System.out.println("\"\".isEmpty() : " + "".isEmpty());
// contains方法
System.out.println("str.contains(\"ABCD\") : " + str.contains("ABCD"));
System.out.println("str.contains(\"ACBD\") : " + str.contains("ACBD"));
// equalsIgnoreCase方法
System.out.println("ABCDEFG".equalsIgnoreCase("AbcdEfg"));
}
}
2.5 转换方法
String(char[] value);
将字符数组转换为字符串
String(char[] value, int offset, int count);
将字符数组转换为字符串,从指定offset位置开始,计数count
offset是开始位置
count是截取个数
例如:
char[] arr = {'A', 'B', 'C', 'D', 'E'};
调用方法参数:
new String(arr, 2, 3); ==> result "CDE"
static String valueOf(char[] data);
同理String(char[] value);
tips: 底层代码是 return new String(data);
static String valueOf(char[] data, int offset, int count);
同理String(char[] value, int offset, int count);
tips: 底层代码是 return new String(data, offset, count);
char[] toCharArray();
将字符串转换为字符数组
例如:
"ABCDE";
返回值:
{'A', 'B', 'C', 'D', 'E'};
package com.qfedu.b_string;
/*
* 转换方法
*/
public class Demo4 {
public static void main(String[] args) {
char[] arr = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
String str = new String(arr);
System.out.println(str);
String str2 = new String(arr, 3, 3);
System.out.println(str2);
String str3 = String.valueOf(arr);
System.out.println(str3);
String str4 = String.valueOf(arr, 3, 3);
System.out.println(str4);
char[] charArray = "你好,这里是骚磊电台".toCharArray();
for (int i = 0; i < charArray.length; i++) {
System.out.println(charArray[i]);
}
}
}
2.6 其他方法
String replace(char oldChar, char newChar);
替换使用newChar字符类型,替换当前字符串内的所有指定字符oldChar
例如:
"ABCDEABCDE";
调用方法:
"ABCDEABCDE".replace('A', '你');
返回值结果:
"你BCDE你BCDE"; 【注】原字符串不变
String[] split(String regex); 【重点】
【重点】切割,将当前字符串按照指定字符串切割成String类型数组
例如:
String str = "你好!他好!大家好!广州好迪";
调用方法:
str.split("!");
返回值结果:
String[] arr = {"你好", "他好", "大家好", "广州好迪"};
调用方法:
str.split("好");
返回值结果:
String[] arr = {"你", "!他", "!大家","!广州", "迪"};
String substring(int beginIndex); 【重点】
从指定beginIndex开始,到字符串结尾截取字符串
例如:
String str = "ABCDEFG";
调用方法:
str.substring(3);
返回值结果:
"DEFG"
String substring(int beginIndex, int endIndex); 【重点】
从指定beginIndex开始,到endIndex结束,截取字符串
要头不要尾 beginIndex <= 结果范围 < endIndex [3,5)
例如:
String str = "ABCDEFG";
调用方法:
str.substring(3, 5);
返回值结果:
"DE"
String toUpperCase();
字符串中所有的英文字母转大写,返回新字符串
String toLowerCase();
字符串中所有的英文字母转小写,返回新字符串
String trim();
去除字符串两边的空格
package com.qfedu.b_string;
import java.util.Arrays;
/*
* 其他方法
*/
public class Demo5 {
public static void main(String[] args) {
String str = "ABCDEFGABCDEFG";
String replace = str.replace('A', '你');
System.out.println(str);
System.out.println(replace);
String str1 = "你好,他好,大家好,广州好迪";
String[] split = str1.split(",");
// Arrays数据工具类的toString方法,数组中的元素会使用, 分割
System.out.println(Arrays.toString(split));
for (int i = 0; i < split.length; i++) {
System.out.println(split[i]);
}
String substring = str.substring(5);
System.out.println(substring);
String substring2 = str.substring(5, 9);
System.out.println(substring2);
System.out.println("abc,,,d浩爷EFG".toUpperCase());
System.out.println("AB!!!!C浩爷Defg".toLowerCase());
System.out.println();
String str2 = " fdafdsaf fedadfs ";
System.out.println(str2);
System.out.println(str2.trim());
}
}
0512String类的更多相关文章
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- C++ 可配置的类工厂
项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core
背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
.NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- PHP-解析验证码类--学习笔记
1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1 定义变量 //随机因子 private $char ...
- C# 多种方式发送邮件(附帮助类)
因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...
随机推荐
- ACM思维题训练 Section A
题目地址: 选题为入门的Codeforce div2/div1的C题和D题. 题解: A:CF思维联系–CodeForces -214C (拓扑排序+思维+贪心) B:CF–思维练习-- CodeFo ...
- The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 XKC's basketball team
XKC , the captain of the basketball team , is directing a train of nn team members. He makes all mem ...
- 使用 if elseif else 指定条件
nrows = 4; ncols = 6; A = ones(nrows,ncols); 遍历矩阵并为每个元素指定一个新值.对主对角线赋值 2,对相邻对角线赋值 -1,对其他位置赋值 0. for c ...
- JDK基本库概述
看脚下,不断行,莫存顺逆. 剖析java的哪些源码 目前主要是java基本库的一些源码的分析,jvm工具的使用等等,后续可能还会结合hotspot源码来分析jvm原理,当然,这是一个比较高级的主题,根 ...
- java读源码 之 list源码分析(LinkedList)
文章目录 LinkedList: 继承关系分析: 字段分析: 构造函数分析: 方法分析: LinkedList: 继承关系分析: public class LinkedList<E> ex ...
- IDOC日志查询报表
当不知道IDOC同步的具体时间,而WE02数据量过大时: 当某条IDOC记录中数据量过大,找不到具体某条数据时: 可采用自开发程序查找,具体代码如下: REPORT ZIDOC_LOG. *----- ...
- STM32 CubeIDE无法进行调试的问题
解决了由于一个很容易忽视的细节最终导致系统配置存在错误造成STM32 CubeIDE无法进行调试的问题: 文章目录 来龙去脉 解决方案 反思 来龙去脉 在享受CubeIDE快速和便捷的服务之后,生成了 ...
- 如何构建一个arm64 AArch64的Ubuntu rootfs
文章目录 1 下载文件创建rootfs文件夹 2 安装qemu-user-static搭建arm64模拟环境 3 chroot 到 模拟arm64的文件系统下 4 安装基础的软件包 5 系统基础的修改 ...
- Windows命令行:xcopy、move、rename
Windows命令行,xcopy复制粘贴,move剪切粘贴,rename/ren重命名.当简单事情重复做时,Windows命令行有用武之地了.批命令中,暂时用不到的行,用两个冒号注释掉. 不同路径下, ...
- python学习(11)文件的读写操作
1.读文件的7种操作模式 操作模式 具体含义 'r' 读取 (默认) 'w' 写入(会先截断之前的内容) 'x' 写入,如果文件已经存在会产生异常 'a' 追加,将内容写入到已有文件的末尾 'b' 二 ...