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 ...
随机推荐
- 编写C#程序的IDE
编写C#程序,在Windows平台下,除了昂贵的Visual Studio.NET这个正宗的工具外,你还了解哪些? 听说有个Eclipse,IBM投钱开发的开源工具,有人也做了个for .NET的pl ...
- Pattern Matching
字符串模式匹配,即子串的定位操作.就是判断主串S中是否存在给定的子串,如果存在,那么返回子串在S中的位置,否则返回0. 实现这种操作有两种算法: 朴素的模式匹配算法 设主串S长度为n,子串T长度为m. ...
- 思维+模拟--POJ 1013 Counterfeit Dollar
Sally Jones has a dozen Voyageur silver dollars. However, only eleven of the coins are true silver d ...
- HDU2937 YAPTCHA(威尔逊定理)
YAPTCHA Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- Codeforce 1255 Round #601 (Div. 2) A. Changing Volume (贪心)
Bob watches TV every day. He always sets the volume of his TV to bb. However, today he is angry to f ...
- CF1335E Three Blocks Palindrome
就是我这个菜鸡,赛时写出了 E2 的做法,但是算错复杂度,导致以为自己的做法只能AC E1,就没交到 E2 上,然后赛后秒A..... 题意 定义一种字串为形如:\([\underbrace{a, a ...
- 一个简单的wed服务器SHTTPD(1)————命令行和文件配置解析
开始学习<LInux网络编程>中的综合案例,虽然代码书上有,还是自己打一下加深理解和印象. 主要有两个函数,完成命令行的解析,另一个实现配置文件的解析,注释还是比较丰富的哦. //star ...
- spring对websocket的集成和使用
WebSocket是HTML5提出的一个用于通信的协议规范,该协议通过一个握手机制,在客户端和服务端之间建立一个类似于TCP的连接,从而方便客户端和服务端之间的通信. WebSocket协议本质上是一 ...
- 设计模式之GOF23模板模式
模板模式template method 场景:具有具体流程,但具体某一步的业务不同 到银行办理业务:排队取号,办理业务,给员工打分 请客吃饭:等待,点单,吃饭,结账 模板方法模式介绍:模板方法是编程常 ...
- [hdu5217]线段树
题意:给定一个只含'(',')'的括号序列,有m个操作,改变某个位置的括号或者询问区间[L,R]内的括号进行配对后剩下的第K个括号的位置(配对的括号从原序列中删掉). 思路:首先对于一个括号序列,进行 ...