用Java拯救我--String类的相关基础知识
Posted betterraccoon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Java拯救我--String类的相关基础知识相关的知识,希望对你有一定的参考价值。
用Java拯救我(三)--String类的相关基础知识
? To Myself:从上个学习博客到这里,我跨过了许多的Java基础知识,因为我个人是计科专业的,再学习java的时候,也秉持着认真学习的态度,但是一些基础语法我就不在这里赘述了,就像学习英语一样,并不是需要连如何记忆每个字母的过程都需要记录,一些简单的输入、输出、分支判断这样的语法,java与C/C++几乎没什么大的差别。
String类的介绍
? string是java的一个在java.lang包下的类,它和基础类型char是有所区别的,char是单个字符的定义方式,String是对字符串的定义,并且String类中也有对char数组的转换方式,后面会做相关的记录。
1. 定义
char c = 'a'; //char只定义单个字符,并且在''中存放字符
String s = new String("hello"); //String是定义了一个对象s,并赋值为字符串hello使用“”包括
String s = "hello"; //该方法为直接赋值与上面方法有差异
/**
* 直接赋值是将常量字符串放入方法区的常量池中,并将引用赋值给s
* 创建对象的方式是在对内存中创建一个新的对象,然后将常量字符串放入常量池,再将引用赋值给对象中
*/
2. 创建字符串的方式
1. String(char a[]); //将字符数组a创建为String对象
char a[] = {'g','o','o','d'};
String s = new String(a); //s = "good"
2. String(char a[],int offset,int length); //将字符数组a中的部分字符创建为字符串对象
char a[] = {'s','t','u','d','e','n','t'};
String s = new String(a,2,4); //s = "uden"
3. String (char[] value); //该构造方法可分配一个新的String对象,将字符数组参数所有元素连接起来
char a[] = {'s','t','u','d','e','n','t'};
String s = new String(a); //s = "student"
3. 字符串的连接
/*String类中可以使用'+'对字符串进行连接*/
String s1 = new String("hello");
String s2 = new String("world");
String s = s1 + " " + s2; //s = "hello world"
/*在进行'+'运算时,左右两边只要有一个String类的变量,则会被转换为字符串连接的功能,
非String类的变量会调用toString()函数*/
String s1 = new String("student");
int x = 1;
System.out.println(s1 + x); //打印为"student1"
4. 获取字符串信息
String str = new String("hello world");
str.length(); //返回一个整数,代表字符串str的长度
str.indexOf(String s); //查找str中s首次出现的位置,若有,返回下标位置,若无,返回-1
str.lastIndexOf(String s);//查找str中s末次出现的位置,若有返回下标位置,若无,返回-1
/*如果lastIndexOf(""),则返回str的长度*/
str.charAt(int index); //返回str中index处的字符,返回值为char
5. 字符串操作
String str = new String("hello world");
//获取子字符串
str.subString(int beginIndex); //返回从beginIndex开始至末尾的子字符串,返回值为String
str.subString(int beginIndex,int endIndex);//返回从beginIndex开始至endIndex结束的子字符串,不包括endIndex位置的字符
//去除空格
str.trim(); //去除str中开头和末尾的空格,但是不会去除中间的空格
//字符串的替换
str.replace(char oldChar,char newChar); //将str中的oldChar全部替换冲newChar字符,返回值为新的字符串String,如果没有oldChar,则返回str
//判断字符串的开始与结尾
str.startsWith(String prefix); //返回值为boolean
str.endsWith(String suffix); //返回值为boolean
//判断字符串是否相等
/*在这里,基本类型判等的方法"=="不能使用,因为字符串是对象,即便他们指向的字符串常量相等,对象也不会相等*/
str.equals(String otherstr);//判断内容和长度是否相等,区分大小写,返回值为boolean
str.equalsIgnoreCase(String otherstr);//判断内容和长度是否相等,不区分大小写,返回值为boolean
//按字典顺序比较两个字符串
str.compareTo(String otherstr);//按照字典(Unicode)顺序对两个字符串进行比较,若str>otherstr,返回1,若str<otherstr,返回-1,当str=otherstr(str.equals(otherstr)为true),返回0
//字母大小写转换
str.toLowerCase(); //将字符串str中的大写字母转换为小写,返回一个新的字符串
str.toUpperCase(); //将字符串str中的小写字母转换为大写,返回一个新的字符串
//字符串分割,sign可以是正则表达式
str.split(String sign); //对str进行分割,分割符为sign,返回值为String数组
str.split(String sign,int limit); //对分割的次数进行了限制,为limit次,返回值为String数组
6. 格式化字符串
/*String类的静态方法format()可以用于创建格式化的字符串*/
String str = String.format(String format,Object... args);
String str = String.format(Local l,String format,Object... args);
/**
* l:看格式化过程的应用的语言环境
* format:格式字符串
* args:格式字符串中有格式说明符引用的参数
*/
//例子
Date date = new Date();
String s = String.format("%te", date);//这里只是以date为例,不同的格式化方式有不同的format,需要时进行查阅
7. 正则表达式
元字符 | 正则表达式的写法 | 说明 |
---|---|---|
. | . | 代表任意一个字符 |
d | \d | 代表 0~9 的任何一个数字 |
D | \D | 代表任何一个非数字字符 |
s | \s | 代表空白字符,如" ’’和’’ ” |
S | \S | 代表非空白字符 |
W | \W | 代表不可用于标识符的字符 |
p {Lower} | \p {Lower} | 代表小写字母 {a~z} |
p {Upper} | \p {Upper} | 代表大写字母 {A~Z} |
p {ASCII} | \p {ASCII} | ASCII 字符 |
p {Alpha} | \p {Alpha} | 字母字符 |
p {Digit} | \p {Digit} | 十进制数字,即 [0~9] |
p {Alnum} | \p {Alnum} | 数字或字母字符 |
p {Punct} | \p {Punct} | 标点符号:!"#$%&‘()*+,-./:;<=>?@[]^_`{ |
p {Graph} | \p {Graph} | 可见字符:[p{Alnum}p{Punct}] |
p {Print} | \p {Print} | 可打印字符:[p{Graph}x20] |
p {Blank} | \p {Blank} | 空格或制表符:[ ] |
p {Cntrl} | \p {Cntrl} | 控制字符:[x00-x1Fx7F] |
正则表达式中使用方括号来表示括号中出现过一次的字符
[^456]:表示4,5,6之外的任何字符
[a-r]:表示a~r中的任何一个字母
[a-zA-Z]:表示任意一个字母
限定修饰符 | 意义 | 示例 |
---|---|---|
? | 0次或1次 | A? |
* | 0次或多次 | A* |
+ | 1次或多次 | A+ |
{n} | 正好出现n次 | A{2} |
{n,} | 至少出现n次 | A{3,} |
{n,m} | 出现n~m次 | A{2,6} |
代码示例
public class Judge {
public static void main(String[] args) {
String regex = "\w+@\w+(\.\w{2,3})+";
String s1 = "aaa@";
String s2 = "aaa@aaa";
String s3 = "705353409@qq.com";
if(s1.matches(regex)){
System.out.println(s1+"合法!");
}
if(s2.matches(regex)){
System.out.println(s2+"合法!");
}
if(s3.matches(regex)){
System.out.println(s3+"合法!");
}
}
}
8. 字符串生成器
由于String类有final修饰符,所以不能对其进行修改,在一个需要大量创建字符串的程序中,对系统资源的开销会产生过大的压力。
这个时候,出现了StringBuilder类大大增加了字符串操作的效率,需要输出结果时,使用toString()方法。
append(content); //追加内容
insert(int offset, args); //在指定位置插入数据内容
delete(int start,int end); //删除从start开始到end位置(不包括end)的子字符串
String类的相关基础知识目前就整理这些进行消化,加油(??????)??
以上是关于用Java拯救我--String类的相关基础知识的主要内容,如果未能解决你的问题,请参考以下文章