用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类的相关基础知识的主要内容,如果未能解决你的问题,请参考以下文章

java基础编程--String及相关

学习Java必备的基础知识06,要想学好必须扎实基本功(⭐建议收藏)#yyds干货盘点#

Java SE之基础篇——ArrayList类详解

整理了一下string类,math类的相关基础知识;

《java基础知识》Java字符串详解

Java基础(36):String与基本数据类型之间的双向转换