java的String类的使用

java的String类的使用

由于最近String类使用的比较频繁,有一些方法的名字又老是忘记(还是用的不够熟练),所以想在这里做一下总结

1.构造一个String对象

1. String常量

也就是用双引号括起来的字符串,它也是一个String对象,只是它没有变量名

2. String类声明并用new创建对象

语法如下

String 对象名 = new String([String常量])

其中若String常量缺省,则会默认是一个空的字符串常量,也就是"",当然,你也可以将声明对象和创建对象分开来写,举个例子

        String str1 = new String("我是字符串");
        String str2;
        str2 = new String("我是字符串");
        System.out.println(str1 == str2);

结果为

false

从结果可以看出,其本质是在内存中重新开辟一个空间来存放String常量,然后将其引用给声明的变量,虽然str1和str2所引用的字符串的内容是一样的,但由于其引用不同,所以str1 != str2

String类还有两个常用的构造方法

String (char[])
String (char[], int startIndex, int count)

其可以将char数组转换成String类的对象,第一个直接将整个char数组连起来转换成String对象,第二个可以指定从char数组的startIndex位置开始,将count个字符连起来转换成String对象

3. 引用String常量

我们可以直接将String常量的引用赋值给一个String类型的变量,语法如下

String 对象名 = String常量

举个例子

        String str1 = "我是字符串";
        String str2 = "我是字符串";
        System.out.println(str1 == str2);

结果为

true

从结果可以看出,str1和str2里的引用是一样的,也就是说,这种方式对于相同的字符串常量,不会在内存中重新开辟一个空间,所以其引用是相同的

2.String类常用的方法

1. length

  • public int length()

    用来获取String对象的字符串的长度

例如

        String str = new String("我是字符串1");
        System.out.println(str.length());

结果为

6

2. equals

  • public boolean equals(String s)

    比较对象s的字符串是否与当前对象的字符串相同(这里比较的不再是引用,而是字符串的内容)

例如

        String str1 = new String("我是字符串");
        String str2 = new String("我是字符串");
        System.out.println(str1 == str2);
        System.out.println(str1.equals(str2));

结果为

false
true

3. indexOf

  • public int indexOf(String s)

    在当前String对象的字符串中从前往后找对象s的字符串,若找到了,则返回其开始的索引位置(字符串的索引是0开始的),若没有找到,则返回-1

  • public int indexOf(String s, int startpoint)

    和上面同理,只是变成了从startpoint开始找对象s的字符串

  • public int lastIndexOf(String s)

    和第一个那个差不多,只不过变成了从后往前找

例如

        String str1 = new String("bcabcabcbc");
        System.out.println(str1.indexOf("abc"));
        System.out.println(str1.indexOf("abc",3));
        System.out.println(str1.lastIndexOf("abc"));

结果为

2
5
5

4. substring

  • public String substring(int startpoint)

    生成一个新的String对象,其字符串是复制当前String对象从startpoint开始到最后的字符序列的字符串

  • public String substring(int start, int end)

    生成一个新的String对象,其字符串是复制当前String对象从start开始到end-1的字符序列的字符串

例如

        String str1 = new String("我是一个字符串");
        System.out.println(str1.substring(2));
        System.out.println(str1.substring(2,5));

结果为

一个字符串
一个字

5. isEmpty

  • public boolean isEmpty()

    判断当前对象的字符串是否为空,若为空,返回true,否则,返回false

例如

        String str1 = new String();
        System.out.println(str1.isEmpty());

结果为

true

6. charAt

  • public char charAt(int index)

    返回当前对象的字符串index位置的字符

7. contains

  • public boolean contains(String s)

    判断当前对象的字符串中是否含有对象s的字符串,若有,返回true,否则返回false

例如

        String str1 = new String("我是一个字符串啊");
        System.out.println(str1.contains("一个字"));
        System.out.println(str1.contains("一个字啊"));

结果为

true
false

8. compareTo

  • public int compareTo(String s)

    当前对象的字符串与s字符串,按照字典序来比较

    1. 若当前的字符串与s的字符串相同,则返回0
    2. 若当前的字符串小于s的字符串,则返回负值
    3. 大于,则返回正值
        String str1 = new String("xyz");
        String str2 = new String("abc");
        System.out.println(str1.compareTo(str2));
        System.out.println(str2.compareTo(str1));

结果为

23
-23

9. trim

  • 获得一个新的String对象,这个新的String对象字符串是当前String对象的字符串去掉前后空格后的字符串

例如

        String str1 = new String("      x  y   z      ");
        String str2 = str1.trim();
        System.out.println(str2);

结果为

x y z

10. startsWith

  • public boolean startsWith(String s)

    判断当前String对象的字符串前缀是否是s的字符串,若是,则返回true,若不是,则返回false

  • public boolean endsWith(String s)

    判断当前String对象的字符串后缀是否是s的字符串,若是,则返回true,若不是,则返回false

例如

        String str1 = new String("记笔记好麻烦啊");
        System.out.println(str1.startsWith("记笔记"));
        System.out.println(str1.endsWith("麻烦啊"));

结果为

true
true

3.String类可以使用的操作符

1. 合并+

  • 两个String的对象可以使用+来完成字符串的合并,其本质是在内存中重新开辟一个空间,把原来的两个字符串合并放进去,例如

            String str1 = new String("记笔记好");
            String str2 = new String("麻烦啊");
            System.out.println(str1+str2);
    

    结果为

    记笔记好麻烦啊

2. 相等==和不相等!=

  • 这两个判断的都是String对象的引用,当两个String对象引用相同时,使用==返回true,!=返回false

4.类型转换

1. 从基本数据类型转换成String类

  • 其静态方法如下:

    public static String valueOf(int n)
    public static String valueOf(float n)
    public static String valueOf(double n)
    public static String valueOf(long n)
    public static String valueOf(byte n)
    

    例如

            String Str1 = String.valueOf(123);
            String Str2 = String.valueOf(123.123);
            System.out.println(Str1);
            System.out.println(Str2);
    

    结果为

    123
    123.123

2.从String类转换成其他类型

  • 其方法如下,分别在java.lang包的Integer,Double,Float,Short,Long,Byte类中

    public Static int parseInteger(String s)
    public Static double parseDouble(String s)
    public Static float parseFloat(String s)
    public Static short parseShort(String s)
    public Static long parseLong(String s)
    public Static byte parseByte(String s)
    

    例如

            String str1 = "123";
            String str2 = "123.123";
            int s1 = Integer.parseInt(str1);
            double s2 = Double.parseDouble(str2);
            System.out.println(s1);
            System.out.println(s2);
    

    结果为

    123
    123.123

5.正则表达式

1. 一些常用的元字符

元字符在正则表达式中的写法意义
\\字符\
.任意一个字符
\\.字符.
\\d0~9之间的任意一个数字
\\D不是0~9之间的数字的任意一个字符
\\s一个空格类字符:’\t’、‘\n’、’\x0B’、’\f’、’\r’
\\S一个非空格类字符
\\w可用于标识符的字符
\\W不可用于标识符的字符
\\p{Punct}标点符号:!"#$%^&*()_+=等等

我们还可以使用中括号[]括起一些字符来表示一个元字符,在中括号中前面加^表示取反,中括号内的字符之间默认是或的关系,用&&连接的字符是与的关系**,单个字符之间可以使用-来表示这两个字符之间所有的ASCII码,但后面的ASCII码必须大于前面的ASCII码,如下表

元字符意义
[abc]a、b、c中任意一个字符
[.]字符.
[a-z]a~z之间任意一个的字符
[0-9]0~9之间任意一个的字符
[a-z[0-9]]a~z或者0~9之间的任意一个字符
[[a-d]&&[b-f]]a~d之间并且是b~f之间的任意一个字符
[[a-z]&&[^d-f]]a~c或者g~z之间的任意一个字符

2.一些常用的限定修饰符

限定修饰符跟在正则表达式(先不用理解什么是正则表达式)后面,用来限定正则表达式出现的次数,如下表

限定修饰符的用法(X表示正则表达式)意义
X?X出现0次或者1次
X*X出现0次、1次或者多次(闭包)
X+X出现0次或者1次(正闭包)
X{n}X恰好出现n次
X{n,}X至少出现n次
X{n,m}X出现n或者m次

3. 正则表达式定义

正则表达式的定义是一个递归定义,定义如下(下面的A和B都是正则表达式)

  • 所有的普通字符,元字符都属于字符的一种,上文出现的字符也都是这个概念,一个字符是一个正则表达式
  • 加上限定修饰符的正则表达式,如A*是一个正则表达式
  • 正则表达式间默认是连接关系,如AB,表示A的后缀是B,B的前缀是A,AB是一个正则表达式
  • 正则表达式间使用|来表示或关系,如A|B,表示A或者B,A|B是一个正则表达式
  • 用小括号括起来的正则表达式,如(A)也是一个正则表达式
  • 优先级:小括号>字符>限定修饰符>连接>或者

这么说可能完全不明白,举个例子吧

(_|[a-zA-Z])\\w*这个正则表达式表示了java中的标识符的词法,即由字母数字和下划线组成,且不由数字开头

我们来分析一下

  • 首先我们拿到了这个表达式,它的形式可以表示成AB,其中A是(_|[a-zA-Z]),B是\\w*,若A和B都是正则表达式,则AB是一个表达式,由于A有小括号,所以先判断A
  • 要判断A,需要先判断小括号内的C,即_|[a-zA-Z],是不是正则表达式,若C是正则表达式,则,A是正则表达式
  • 现在,我们拿到的是_|[a-zA-Z],它的形式是D|E,且D和E都是一个字符(当然也是正则表达式),优先级相同,所以我们从左向右判断
  • _属于单个的普通字符,所以它是字符,因此他是一个正则表达式
  • [a-zA-Z]符合元字符的定义,所以他是字符,因此他是一个正则表达式
  • 判断完D和E,且他们都是正则表达式,所以C是一个正则表达式,所以A是一个正则表达式,接着判断B
  • B,即\\w*,它的形式是F*,F是\\w,接着判断F
  • 因为\\w是一个元字符,所以F是正则表达式,所以F*是正则表达式,所以B是正则表达式
  • 因为A和B都是正则表达式,所以原式就是正则表达式了

4.与正则表达式相关的方法

学习完了正则表达式的写法,我们就需要学习怎么用正则表达式了

  • matches

    public boolean matches(String regex),这个方法可以判断当前String对象的字符串是否和regex这个正则表达式字符串相匹配

    例如

            String regex = "(_|[a-zA-Z])\\w*";
            String s = "a_1";
            String r = "123s_1";
            System.out.println(s.matches(regex));
            System.out.println(r.matches(regex));
    

    结果为

    true
    false

  • replaceAll

    public String replaceAll(String regex, String replacement),这个方法可以返回一个新的String对象,这个对象的字符串是吧当前对象的字符串中所有和参数regex匹配的子字符串,用replacement替换后的得到的字符串

            String regex = "a|b";
            String s = "abcderg";
            System.out.println(s.replaceAll(regex,"k"));
    

    结果为

    kkcderg

  • split

    public String[] split(String regex),这个方法可以将与regex匹配的子字符串作为分隔符分解出当前对象的字符串中的单词,并将单词放在String数组中

    例如

            String regex = "x+";
            String s = "IxxlovexxChina";
            String str[] = s.split(regex);
            for(int i = 0; i<str.length; i++)
                System.out.println(str[i]);
    

    结果为

    I
    love
    China

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值