Stirng字符串类:(java.lang.String)
字符串操作是计算机程序设计中最常见的行为。String对象为引用类型数据。
public final class String 字符串不可变
implements Serializable,Comparable<String>, CharSequence 实现了序列化、比较接口。
字符串的创建:
代码示例与内存图:
String s = new Sting(“hello”); |
|
String s = "hello"; |
|
重载“+”与StringBulider
用于String的“+”与“+=”是JAVA中仅有的两个重载过的的操作符,而JAVA不允许程序员重载任何操作符。
示例代码:
class Concatenation { public static void main(String[] args) { String mango = "芒果"; String s = "abc" + mango + 47; System.out.println(s); } } //输出为:abc芒果47 |
其内部执行过程为:编译器创建了一个StringBuilder对象,用以构造最终的String,并为每个字符串调用一次StringBuilder的append()方法,总共三次,最后再调用StringBuiler的toString()方法生成结果,并赋值给s。
StringBulider的其他方法:
- insert(); 插入方法
- repleace(); 替换方法
- substring(); 截取方法
- reverse(); 反转方法
StringBuilder 是 JAVA SE5引入,在此之前使用的是StringBuffer。StringBuffer是线程安全的。
String类的常用方法:
方法 | 参数,重载版本 | 应用 |
构造器 | 重载版本:默认,String,StringBuilder,StringBuffer,char数组,byte数组 | 创建String对象 |
length(); |
| String中字符的个数 |
charAt() | Int索引 | 获得String中该索引位置上的char |
getChars(),getBytes() | 要复制部分的起点和终点的索引,复制的目标数组,目标数组的起始索引 | 复制char或byte多一个目标数组中 |
toCharArray() |
| 生成一个char[],包含String的所有字符 |
equals(),equelsIgnoreCase() | 与之进行比较的String | 比较两个String的内容是否相同 |
compareTo() | 与之进行比较的String | 按词典顺序比较String的内容,比较结果为负数、零或正数。注意,大小写不等价。比较基于字符串中各个字符的 Unicode 值 |
contains() | 要搜索的charSequence | 如果该String对象包含参数的内容,比较结果为负数、零或正数。注意,大小写不等价 |
contentEquals | 与之进行比较的CharSequence或StringBuffer | 如果该String与参数的内容完全一致,则返回true。 |
equalsIgnoreCase() | 与之进行比较的String | 忽略大写小,如果两个String的内容相同,则返回true |
regionMatcher() | 该String的索引偏移量,另一个String鸡期索引偏移量,要比较的长宽。常在版本增加了“忽略大小写”功能。 | 返回boolean结果,以表明所在比较区域是否相等 |
statsWith() | 可能的起始String。重载版本在参数中增加了偏移量。 | 返回boolean结果,以表明该String是否一次参数起始。 |
endsWith() | 该String可能的后缀String | 返回boolean结果,以表明该String是否一次参数结束。 |
indexOf(),lastIndexOf() | 重载版本:char,char与起始索引,String,String与起始索引 | 如果该String并不包含此参数,就返回-1;否则返回此参数在String中的起始索引。lastIndexIf()是从后向前搜索。 |
substring()(subSequence()) | 重载版本:起始索引;起始索引+终点坐标 | 返回一个新的String,以包含参数指定的子字符串。 |
concat() | 要连接的字符串 | 返回一个新的String对象,内容为原始String连接上参数String。 |
replace() | 要替换掉的字符,用来进行替换的新字符。也可以用一个CharSequence来替换另一个CharSequence | 返回替换字符后的新String对象。如果没有替换发生,则返回原始的String对象。 |
toLowerCase() toUpperCase() |
| 将字符的大小写改变后,返回一个新String对象,如果没有改变发生,则返回原始的String对象。 |
trim() |
| 将String两端的空白字符删除后,返回一个新的String对象。如果没有改变发生,则返回原始对象。 |
valueOf() | 重载版本:Object;char[];char[] 偏移量 字符个数;boolean ; char ;int;long;float;double | 返回一个表示参数内容的String |
intern() |
| 为每个唯一的字符序列生成一个且仅生成一个String引用。 |
从这个表中可以看出,当需要改变字符串的内容时,String类的方法都会返回一个新的String对象。同时,如果内容没有发生改变,String的方法只是返回只想原对象的引用而已。
格式化输出:
System.out.format
C语言的格式化输出为:printf();
例如:printf(“Row 1:[%d %f]\n”,x,y);
这行代码在执行的时候,首先将x的值插入到 %d 的位置,然后将y 的值插入到 %f 的位置。这些占位符称作格式修饰符,他们不但说明了插入数据的的位置,同时还说明了将插入什么什么类型的变量,以及如何对其格式化。
JAVA中System.out.format();
JDK5引入format方法,用于PrintStream或PrintWrite对象。
例如:
class SimpleFormat { public static void main(String[] args) { int i = 5; double j = 5.32542; //格式化输出 System.out.format("Row 1: [%d,%f]",i,j); System.out.printf("Row 1: [%d,%f]",i,j); System.out.println("Hello World!"); } } |
可以看到,format()与printf()是等价的。
Formatter类
所有新的格式化功能都由 java.util.Formatter 类处理。可以将Formatter看做一个翻译器,它将你的格式化字符串与数据翻译成需要的的结果。当你创建一个Formatter对象的时候,需要向其构造器传递一些信心,告诉它最终的结果将向哪里输出。
类型转换字符 | |
d 整数型(十进制) | e 浮点数(科学计数) |
c Unicode字符 | x 整数(十六进制) |
b Boolean值 | h 散列码(十六进制) |
s String值 | % 字符% |
f 浮点数(十进制) |
|
String.format:
JAVASE5也参考了C中的sprintf()方法,以生成格式化的String对象。
String.format()是一个static方法,他接受与Formatter.format()方法一样的参数,但返回一个String对象。
基本数据类型包装类
数据类型 | 包装类 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
boolean | Boolean |
char | Character |
float | Float |
double | Double |
常用方法:
l 基本数据类型转成字符串:类.toString(); 例如:Integer.toString();
l 字符串转成基本类型数据: 例如:Integer.parseInt(); 或 Integer.valueOf();
自动装箱拆箱机制:
代码示例:
class Auto { public static void main(String[] args) { Integer i = 4; //自动装箱操作 int j = new Integer(5); //自动拆箱操作 Integer in = new Integer(2); //自动拆箱操作相当于调用in.intValue(); System.out.println(i+" "+j); } } |