java基础教程:常用对象之String(21)
来源:互联网 发布:hololens软件开发环境 编辑:程序博客网 时间:2024/06/03 13:03
上节课我们学习了java的Object类。了解了所有对象的一些公共方法。这节课我们学习下java中使用最频繁的对象类:String
本节课的内容:
1、String类
2、String对象
3、String类的方法
第一部分:String类
String类是java.lang包下的一个类,主要用于定义字符串对象,提供一些字符串的操作方法。
我们看下String类的定义(类定义部分):
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {}
String是一个final类,不能被继承。
实现了三个接口:java.io.Serializable序列化,Comparable<String>比较,CharSequence字符序列。
第二部分:String对象
如果我们需要使用String来存储一个字符串,那么我们自然需要实例化一个String对象来存储。那么,是不是直接new就可以了呢?
当然可以,String支持new的方式创建字符串。但是,字符串是java中用到的非常频繁的对象。如果每次都new,会在堆内存上消耗很多的空间。
java为了降低这种消耗,提供了丰富的字符串创建方式,以满足各种需求。我们来看看:
String x = "abc";
String x = new String("abc");
String x = "a"+"b"+"c";
String x = "ab";y=x+"c";
char data[] = {'a', 'b', 'c'}; String str = new String(data);
String x = "abc"; y=x;
由此可见,java的String对象可以使用=赋值,也可以使用+进行字符串的拼接。
那=相比new的方式,到底做了什么?
其实,在jvm中,维护了一个字符串的常量池,里边存放了一些String字符串常量。
当使用=进行赋值时,如果池子中已经存在这些串,就直接把地址引用给对象。这样以来,不需要重复的开辟对象空间。
我们可以通过例子来看:
String a="abc";String b = "abc"; System.out.println(a==b);
所以,建议使用=的方式进行字符串的赋值操作。
另外,在String的定义中,我们可以看到有两个final,一个是String的类定义中,final class String.
另一个是value属性:private final char value[];
这两个final决定了String的特殊:任何值的改变都会产生新的String对象。
最后,String是对象,所以使用new的方式创建的字符串一定会创建对象。
而使用=赋值不一定产生新对象(取决于常量池)。
第三部分:String的方法
String的方法非常多。我们找一些常见的说明下。
1、构造方法String(byte[] bytes, Charset charset)
这个方法可以将一个byte数组转换为String对象。一般用于String的编码转换。
例如将GBK的字符串转为UTF-8的字符串。
String a = "GBK";
String b = new String(a.getBytes("GBK"),"UTF-8");//先通过getBytes方式将原始串按编码解析为byte数组,再将数组转为合适的编码串。
2、charAt(int index)返回字符串中某个位置的字符,index从0开始
String a = "abc";a.charAt(1);//b
3、concat(String str)将指定的字符串拼接在当前字符串的后面。
String a = "ab";a.concat("c");//abc
4、contains(CharSequence s)判断字符串是否包含某一字符序列(可以是字符串)
String a = "abc";a.contains("c");//true
5、endsWith(String suffix)判断字符串是否以某个子串结束
String a = "abc";a.endWith("c")'//true
6、equals(Object anObject)重写了Object的equals方法,表示是否和另一个对象相同。可以是对象引用地址或值相同。
String a ="abc"; a.equals("abc");//true
7、equalsIgnoreCase(String anotherString)判断字符串是否和另一个串的值相同(不区分大小写)
String a = "abc"; a.equalsIgnoreCase("AbC");//true
8、format(String format, Object... args)格式化一个字符串,使其按照指定的规则进行替换。
String a = "name:%s,age:%d"; a = String.format(a,"john",23); // name:john,age:23
%s代表字符串 %d代表数字,其他更多类型,请查询资料。
9、getBytes()获取字符串的byte数组
10、getBytes(String charsetName)获取字符串以指定编码转换后的byte数组
11、indexOf(String str)返回某个子串在字符串中的位置
String a = "abc";a.indexOf("b");//1
12、isEmpty()判断字符串的长度是否为0,也就是内容为空。但不是对象为空。
13、lastIndexOf(int ch)返回子串在字符串中的最后出现位置
String a = "abcefgabc"; a.lastIndexOf("abc");//6
14、length()返回字符串的长度
String a ="abc";a.length();//3
15、matches(String regex)判断字符串是否符合某个正则表达式。(注意需要转义)
String a = "abcdefg";a.matches("^[a-z]+$");//true
16、replace(CharSequence target, CharSequence replacement)将字符串中指定的字符替换为目标串
String a = "abcefgabc"; a=a.replace("efg","abc");//abcabcabc
17、replaceAll(String regex, String replacement)将字符串中指定正则表达式的字符串替换为目标串
String a = "abcefgabc";a=a.replaceAll("[efg]+","abc");//abcabcabc
18、split(String regex)将字符串以指定的分隔符拆分成字符串数组
String a = "1,2,3,4"; String arr = a.split(",");//[1,2,3,4]
19、startsWith(String prefix)判断字符串是否以某个子串开始
String a = "abc"'; a.startWith("a"); //true
20、substring(int beginIndex) 从某个开始位置截取字符串,位置从0计算。包含起始位置
String a = "abc"; a.substring(1); //bc
21、substring(int beginIndex, int endIndex) 从某个开始位置到结束位置截取字符串,位置从0开始.包含起始位置,但不包含结束位置。
String a = "abc"; a.substring(1,2); //b
22、toCharArray()返回字符串的字符数组
23、toLowerCase、toUpperCase返回字符串的小写、大写
24、trim() 截取字符串前后的空格(半角)
25、valueOf(xx) 得到基本类型 或char数组 或object的String值。
int i = 2; String.valueOf(i); // "2"
boolean f = true; String.valueOf(f); // "true"
其他基本类型都基本可以转换。
- java基础教程:常用对象之String(21)
- java基础教程:常用对象之Object(20)
- java基础教程:常用对象之StringBuilder StringBuffer(22)
- java基础教程:常用对象之日期处理类(24)
- java基础教程:常用对象之数学公式类Math(25)
- java基础教程:常用对象之随机数(26)
- java基础教程:常用对象之基本数据类型包装类(23)
- java基础教程:面向对象编程之封装(14)
- java基础教程:面向对象编程之继承(15)
- java基础教程:面向对象之抽象类(16)
- java基础教程:面向对象之接口(17)
- java学习之路--java对象(1)--重点String类的常用方法
- java常用类之string
- JAVA常用类之String
- Java常用类之String
- JAVA之String常用方法
- java基础教程:面向对象(13)
- Java常用之String.valueOf、toString、(String)
- VCA824调试的若干问题
- [安全]基础知识_汇编(字节序说明+masm基础)
- View的事件分发机制
- java gcc博客系列
- 自动化部署的shell脚本
- java基础教程:常用对象之String(21)
- 使用JMeter的HTTP代理服务器录制app脚本
- Android笔记(4)TextView/Button/ImageView的圆角矩形/圆形控件
- mysql null的注意情况
- 互联网架构为什么要做服务化?(微服务)
- HiveSQL查询优化
- Android notification
- 关于EXP-00106: 数据库链接口令无效 问题处理
- 51nod 1548 欧姆诺姆和糖果 (思维 枚举)