Java中常用的API(二)——String
在第一节中我们介绍了Object类的方法以及操作,那么这一节,我们将介绍一个新的类:String。
String类是我们经常使用的类,应用十分广泛。同时,String类中封装了一系列的方法,非常常用,接下来我们就一一介绍。
String
String类描述的是文本字符串序列。
一般我们使用String类的时候,都是直接赋值,代码如下:
String name = "luck";
还有另外一种使用String类的方法,那就是new一个String对象,代码如下:
String name = new String("luck");
1. 比较方法
接下来,就用下面的代码作为例子:
public static void main(String args[]){
String name = "wang";
String name1 = "wang";
String name2 = new String("wang");
String name3 = new String("wang");
System.out.println(name==name1);
System.out.println(name1==name2);
System.out.println(name2==name3);
}
你认为输出的结果是什么样子的?你心里可能会非常没有谱,没关系,我们先讲一下原理。
首先,在使用第一种赋值方法的时候,String name = “wang”这个语句会首先检查是否在字符串常量池中存在这个字符,如果存在,则直接将这个字符串的地址赋给name,如果没有,则将在字符串常量池中创建一个”wang”的字符串。
所以,毋庸置疑,第一个输出语句输出的结果是true,因为name、name1相当于指向的是同一个地址。
接着,使用String name2 = new String(“wang”);这条语句的时候,该语句会创建两个对象,首先会先检查字符串常量池中存不存在jack这个字符串对象,如果不存在就会创建,如果存在就返回内存地址值。然后,new String这个语句就会在堆内存中开辟一个字符串对象。总共两个对象。
所以,name2、name3分别指向的是这两个对象的内存地址,所以返回的是false,自然name1和name2比较的返回结果也是不同的。
2. 获取方法
· int length() 获取字符串的长度
· char charAt(int index) 获取特定位置的字符 (注意角标越界问题)
· int indexOf(String str) 获取特定字符str的位置(overload)
· int lastIndexOf(int ch) 获取最后一个该字符的位置(这里的ch代表的是字符的编码值)
3. 判断方法
boolean endsWith(String str) 是否以指定字符结束
boolean isEmpty()是否长度为0
Boolean contains(CharSequences) 是否包含指定序列 应用:搜索
Boolean equals(Object anObject) 是否相等
Boolean equalsIgnoreCase(String anotherString) 忽略大小写是否相等
4. 转换方法
String(char[] value) 将字符数组转换为字符串
String(char[] value, int offset, int count)
Static String valueOf(char[] data)
static String valueOf(char[] data, int offset, int count)
char[] toCharArray() 将字符串转换为字符数组
5. 其他方法
String replace(char oldChar, char newChar) 替换
String[] split(String regex) 切割
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)截取字串
String toUpperCase() 转大写
String toLowerCase() 转小写
String trim() 去除空格
根据上述的内容,我们可以进行一些实际的应用操作。
实际应用
1. 去除字符串两边的空格
这个题目相对来讲是比较简单的,思路如下:先判断出首位不是空格的位置,再判断出末尾空格开始的位置,这样就能利用字符串的切割函数来切割字符串,从而得到我们要的子串。
public class Demo1{
public static void main(String args[]){
String name = " *fsdf ";
String name1 = " 6 ";
System.out.println(trim(name));
System.out.println(trim(name1));
}
public static String trim(String str){
//0.定义首位两个位置的角标
int start = 0;
int end = str.length()-1;
//1.使用循环遍历出首位非空格元素的位置
for(int i=0;i<str.length();i++){
if(str.charAt(i)==' '){
start++;
}else{
break;
}
}
System.out.println("首位非空格元素的位置:" + start);
for(;end<str.length() && end>=0;){
if(str.charAt(end) == ' '){
end--;
}else{
break;
}
}
System.out.println("末尾非空格元素的位置:" + end);
//2.切割字符串
if(start<=end){
return str.substring(start, (end+1));
}else{
return "=_=";
}
}
}
输出结果如下:
首位非空格元素的位置:6
末尾非空格元素的位置:10
*fsdf
首位非空格元素的位置:4
末尾非空格元素的位置:4
6
需要特别注意的是,使用substring这种函数的时候,第一个参数是startIndex,即开始位置,这个就是真实的开始位置;而后面第二个参数是endIndex,即末尾位置,这时定位的是这个位置的前一位。也就是说,一个字符串,如果要从第二位开始切割到第五位截止,那么写入的参数应当是2,6。
2. 根据文件路径,获取文件名称
我们知道,通常情况下,windows系统的文件路径格式如:D:\file\test.java这样的形式,那么,我们应当如何获取到文件名称呢?
下面这种办法十分高效:
public static String getFileName2( String path ){
return path.substring( path.lastIndexOf("\\") + 1 );
}
}
首先,获取到最后一个“\”的位置,将这个位置加一,就是文件名首字母的位置,然后直接截取就可以了。
3. 将字符串对象中存储的字符反序
反序就是将字符串颠倒顺序,像这样:abcd———–>dcba,那么对于字符串又该如何实现呢?我们无法直接对字符串进行颠倒顺序的操作,但是我们可以对字符数组进行这样的操作,所以,首先应该做的是将字符串转换成字符数组,接下来就好办了。
public static String reaverseString( String src ){
// 0. 将字符串转换为字符数组
char chs[] = src.toCharArray();
// 1. 循环交换
for ( int start = 0 , end = chs.length - 1; start < end ; start++,end-- )
{
// 2. 数据交换
char temp = chs[end];
chs[end] = chs[start];
chs[start] = temp;
}
// 3. 将字符数组转换为字符串
return new String( chs );
}
4.求一个子串在整串中出现的次数
public static int countTag(String str,String tag){
//0.初始化位置变量以及计数变量
int index = 0;
int count = 0;
//1.定义循环,计算tag出现的次数
while((index = str.indexOf(tag)) != -1){
//2.看子串
System.out.println(str);
str = str.substring(index + tag.length());
//3.累加
count++;
}
return count;
}
这个其实夜视仪相当简单的,最重要的一点就是将字符串str反复切割,切去的部分包括刚刚匹配到的tag的内容,这样再次循环执行这个操作,最终就能够得到数量。
Java中常用的API(二)——String的更多相关文章
- Java中常用的API(一)——Object
概述 如果要问Java为什么是用起来非常舒服的语言,那很大一部分的功劳就是JavaAPI的.API定义了许多封装好的类和方法供我们使用,来处理特定的问题,所以学习常用的API是非常重要的. 同时,面向 ...
- Java中常用的API(四)——其他
前面说三篇文章分别介绍了Object.String.字符缓冲类的API,接下来我们简要介绍一下其他常用的API. 1.System System类用于获取各种系统信息,最为常用的是: System.o ...
- Java中常用的API(三)——缓冲区字符串
前两节中分别介绍了Object和String,这一节主要介绍StringBuffer和StringBuilder. StringBuffer 由于String是不可变的,所以导致String对象泛滥, ...
- java中常用的工具类(二)
下面继续分享java中常用的一些工具类,希望给大家带来帮助! 1.FtpUtil Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- 【Java】Java中常用的String方法
本文转载于:java中常用的String方法 1 length()字符串的长度 String a = "Hello Word!"; System.out.println(a.len ...
- Java高级特性 第2节 java中常用的实用类(1)
一.Java API Java API即Java应用程序编程接口,他是运行库的集合,预先定义了一些接口和类,程序员可以直接调用:此外也特指API的说明文档,也称帮助文档. Java中常用的包: jav ...
- Java中常用的查找算法——顺序查找和二分查找
Java中常用的查找算法——顺序查找和二分查找 神话丿小王子的博客 一.顺序查找: a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数据最后一位 ...
- java中常用的工具类(三)
继续分享java中常用的一些工具类.前两篇的文章中有人评论使用Apache 的lang包和IO包,或者Google的Guava库.后续的我会加上的!谢谢支持IT江湖 一.连接数据库的综合类 ...
- java中常用的工具类(一)
我们java程序员在开发项目的是常常会用到一些工具类.今天我汇总了一下java中常用的工具方法.大家可以在项目中使用.可以收藏!加入IT江湖官方群:383126909 我们一起成长 一.String工 ...
随机推荐
- 【转帖】Windows 10版本占比一览:v1903依然最稳定 占比52.6%
Windows 10版本占比一览:v1903依然最稳定 占比52.6% https://os.51cto.com/art/202002/611452.htm 其实感觉现阶段的win10 与 2015年 ...
- P1049 数列的片段和
P1049 数列的片段和 转跳点:
- C++ 检测物理内存以及磁盘空间
BOOL CheckResource() { MEMORYSTATUSEX statex; statex.dwLength = sizeof (statex); GlobalMemoryStatusE ...
- LINUX——LVM逻辑卷管理
LVM: logical volumes manager LVM逻辑卷部署 物理卷—>卷组—>逻辑卷 第一步:关机添加磁盘:两个磁盘可以构成一个磁盘组. 第二步:查看磁盘 # ls /de ...
- 文本编辑器vim/vi——模式切换及输入模式
vim一共有三种模式:命令模式.输入模式.末行模式 要从命令模式切换到输入模式:a,i,o a——append 属于在后面追加内容:i——insert 属于插入,在前面插入内容:o——other 属于 ...
- JavaScript的函数和对象介绍
一.JavaScript中的函数 1.函数的概述 JavaScript中的函数是一段可执行代码的合集,在需要执行的时候可以在方法名之后添加一对小括号执行方法.是一段可执行的字符串. 2.函数中隐藏的属 ...
- ACM-Checker Challenge
题目描述:Checker Challenge 1000(ms) 10000(kb) 20 / 90 Examine the 6x6 checkerboard below and note tha ...
- jmeter --- 组件
- Vue中 几个常用的命名规范
1,组件名 官方推荐的组件名是 每个单词首字母大写(PascalCase) 或者 全小写用 - 连接(kebab-case) . 在DOM中使用的时候, 改为全小写, 单词之间用 - 连接. Vue. ...
- 3 react 简书 添加 头部搜索动态效果
1. 添加动态效果组件 yarn add react-transition-group 2. 修改 src/common/header/index.js import React, {Componen ...