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 ...
随机推荐
- Vue页面权限控制和动态添加路由
原文转自:点我 页面权限控制 页面权限控制是什么意思呢? 就是一个网站有不同的角色,比如管理员和普通用户,要求不同的角色能访问的页面是不一样的.如果一个页面,有角色越权访问,这时就得做出限制了. Vu ...
- bootstrap4中bootstrap_treeview不显示图标原因以及解决办法
1.bootstrap4中bootstrap_treeview不显示图标原因 查看过大神的博客,经过自己试验,插件依赖: bootstrap/3.3.7 jquery/3.3.1 <link h ...
- MinorGC前检查
- [hdu2119]二分图最小覆盖,最大匹配
题意:给一个01矩阵,每次可以选一行或一列,打掉上面所有的1,求打掉所有的1所需的最小次数. 思路:经典的模型了,二分图最小覆盖=最大匹配.所谓最小覆盖是指选最少的点关联所有的边.容易得到将行和列看成 ...
- 关于redis,你需要了解的几点!
一.关于 redis key: 1.是二进制安全的,也就是说,你可以使用任何形式的二进制序列来作为key,比如一个string,或者一个jpg图片的数据,需要说明的是,空字符串也是一个有效的key. ...
- fakebook
0x01 查看robots.txt 发现user.php.bak文件 得到源码 <?php class UserInfo { public $name = ""; publi ...
- python 利用 for ... else 跳出双层嵌套循环
背景 周末在写一个爬虫时,遇到这样一种场景:从搜索结果中下载指定数量的文件 例如:搜索结果中共分为10页展示,加起来一共50条数据,现在要做的是从50条数据中下载指定数量的数据 为了实现这个功能,开始 ...
- ql的python学习之路-day9
前言:本节主要学习装饰器 一.装饰器 定义:本质上是个函数,用来装饰其他函数:(就是为其他函数添加附加功能) 原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 以上两点可以总 ...
- Jenkins 实现 ldap认证
使用自己搭建的openldap: 使用Test LdapSetting测试的结果: 所测试的用户在:svn,jenkins,gitlab,sonarqube,wpsadmin组下 若用户不在jenki ...
- percona 5.6的安装
yum 安装, 1 如果已经安装过mysql 的东西,先卸载了.yum remove mysql* 包括 /etc/my.cnf 这个东西卸载的时候不会删除. mv /etc/my.cnf /etc/ ...