两种实例化方式:
String str = "Hello" ; //直接赋值
String str = new String("Hello") ;//构造方法
String类对象的两种实例化方式及区别:
直接赋值:只会产生一个字符串对象,并且可以自动入池;
构造方法:会产生两个字符串对象,其中一个将成为垃圾,同时不会自动入池,但是用户可以使用intern()方法手工入池。
即:String str1 = new String("Hello").intern() ;
在Java之中,String类的设计采用的是一种称为共享设计模式的概念。在每一个JVM底层都会存在一个String的字符串对象池(Object Pool),如果用户现在采用了直接赋值的方式声明了一个字符串,那么此字符串会自动的保存在此对象池之中(入池),而后如果用户继续声明了其他字符串变量,但是此字符串的内容正好在对象池之中已经保存了,则不会开辟新的字符串,而是从池之中取出来继续使用。实际上共享设计模式的实现主要依靠的是数组。
String对象比较时“==”和“equals()”的区别:
“==”:表示数值比较,比较的是两个字符串对象的内存地址数值;
“equals()”:表示的是两个字符串的内容。
注:比较时字符串常量写在前面,以防止出现空指向异常。System.out.println("Hello".equals(str)) ;
字符串修改与扩充(StringBuffer)
任何语言都没有提供字符串的定义,都是通过程序自己补充的,所以在Java之中每当定义了一个字符串之后,那么字符串的内容是不可能改变的。在整个的修改过程之中,可以发现字符串的内容本身没有任何的变化。一直在改变的是String对象的引用,而它改变的方式所带来的后果就是会出现垃圾。
如果在程序中需要对字符串进行频繁的修改连接操作的话.使用StringBuffer性能会更高
StringBuffer sb = new StringBuffer(str);
sb.append("here");
String str = sb.toString();
String与字符数组
No. |
方法名称 |
类型 |
描述 |
1 |
public String(char[] value) |
构造 |
将全部字符数组变为字符串 |
2 |
public String(char[] value, int offset, int count) |
构造 |
将部分字符数组变为字符串,指定开始索引和长度 |
3 |
public char charAt(int index) |
普通 |
返回指定索引位置的字符 |
4 |
public char[] toCharArray() |
普通 |
将字符串变为字符数组 |
char c = str.charAt(0) ;
char[] data = str.toCharArray() ; //将字符串变为字符数组
判断某一个字符串中的数据是否由纯数字组成
public staticboolean isNumber(String temp) {
char [] data =temp.toCharArray() ; // 将字符串变为字符数组
for (int x = 0 ; x <data.length ; x ++) {
if (data[x] >'9' || data[x] < '0') { // 不在数字范围
returnfalse ;
}
}
return true ; // 如果没有错误,执行此步
}
String与字节数组
在Java之中使用字节数组有两类情况:数据传输、编码转换。
No. |
方法名称 |
类型 |
描述 |
1 |
public String(byte[] bytes) |
构造 |
将全部的字节数组变为字符串 |
2 |
public String(byte[] bytes, int offset, int length) |
构造 |
将部分字节数组变为字符串 |
3 |
public byte[] getBytes() |
普通 |
将字符串变为字节数组 |
4 |
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException |
普通 |
编码转换 |
字符串比较
No. |
方法名称 |
类型 |
描述 |
1 |
public boolean equals(String anObject) |
普通 |
比较两个字符串的内容,区分大小写 |
2 |
public boolean equalsIgnoreCase(String anotherString) |
普通 |
不区分大小写的比较 |
3 |
public int compareTo(String anotherString) |
普通 |
比较两个字符串大小 |
在进行字符串比较的时候最需要说明的是compareTo()方法,这个方法的返回值是一个int型数据,而这个int型的数据一共有三类返回值:大于(>0)、小于(<0)、相等(=0)。
字符串查找
从一个指定的字符串之中查找某一个子字符串是否存在
No. |
方法名称 |
类型 |
描述 |
1 |
public boolean contains(String s) |
普通 |
直接查找子字符串是否存在,JDK 1.5提供的 |
2 |
public int indexOf(String str) |
普通 |
从头查找指定字符串位置,如果找不到返回-1 |
3 |
public int indexOf(String str, int fromIndex) |
普通 |
从指定位置查找指定字符串的位置 |
4 |
public int lastIndexOf(String str) |
普通 |
由后向前查找指定字符串的位置 |
5 |
public int lastIndexOf(String str, int fromIndex) |
普通 |
从指定位置由后向前查找 |
6 |
public boolean startsWith(String prefix) |
普通 |
判断是否以指定的字符串开头 |
7 |
public boolean startsWith(String prefix, int toffset) |
普通 |
从指定位置开始判断是否以指定的字符串开头 |
8 |
public boolean endsWith(String suffix) |
普通 |
判断是否以指定的字符串结尾 |
字符串替换
可以将一个字符串之中的指定内容替换为其他内容,使用方法如下:
No. |
方法名称 |
类型 |
描述 |
1 |
public String replaceAll(String regex, String replacement) |
普通 |
全部替换 |
2 |
public String replaceFirst(String regex, String replacement) |
普通 |
替换首个 |
字符串截取
如果要从一个完整的字符串之中截取部分字符串,则可以采用如下方法完成。
No. |
方法名称 |
类型 |
描述 |
1 |
public String substring(int beginIndex) |
普通 |
由指定位置截取到结尾 |
2 |
public String substring(int beginIndex, int endIndex) |
普通 |
截取指定索引范围内的字符串 |
字符串拆分
按照指定的内容可以将一个字符串拆分为若干个子部分,可用的方法如下:
No. |
方法名称 |
类型 |
描述 |
1 |
public String[] split(String regex) |
普通 |
将字符串全拆分 |
2 |
public String[] split(String regex, int limit) |
普通 |
部分拆分,其他不拆分的作为一个整体 |
如果在进行字符串拆分的过程之中出现了拆不开的情况,那么可以使用“\\”转义。
String str ="192.168.1.1" ;
String result[] = str.split("\\.");
其他方法
No. |
方法名称 |
类型 |
描述 |
1 |
public String concat(String str) |
普通 |
字符串连接,与“+”类似 |
2 |
public boolean isEmpty() |
普通 |
判断是否是空字符串("") |
3 |
public int length() |
普通 |
字符串长度 |
4 |
public String toLowerCase() |
普通 |
字符串转小写 |
5 |
public String toUpperCase() |
普通 |
字符串转大写 |
6 |
public String trim() |
普通 |
去掉左右空格 |
字符串变为基本数据类型
有了包装类之中,对开发之中而言,最大的方便之处是可以利用其将字符串变为指定的基本数据类型(在任何时候所有传递的数据都是字符串),下面以几个代码为例:
· String变为int,依靠Integer类的方法:public static int parseInt(String s);
· String变为double,依靠Double类的方法:public static double parseDouble(String s);
·String变为boolean,依靠Boolean类的方法:public static booleanparseBoolean(String s)。例如:
String str ="123" ; // 字符串
int temp =Integer.parseInt(str) ; // 字符串变为int但是在进行此类转换操作的时候,一定要保证字符串中的内容全部由数字所组成,否则会出现数字格式化“NumberFormatException”异常。
String str ="true" ; // 字符串
boolean temp =Boolean.parseBoolean(str) ; // 字符串变为boolean
如果在进行String向boolean数据转型的过程之中,字符串中的内容不是true或者是false,都会统一按照false处理。
基本数据类型变为字符串
做法一:任何的基本数据类型遇见了字符串的相加操作后都变为字符串。
int x = 100 ;
String temp =x + ""; // int变为String 做法二:做法一之中虽然进行了转换,但是会产生垃圾的字符串空间,所以在实际的工作之中,如果要将基本类型变为字符串往往要利用String类的方法:“public static String valueOf(数据类型 b)”。
int x = 100 ;
String temp = String.valueOf(x) ; // int变为String