String在Java中不是一个数据类型而是类类型(Java.lang.String)
String类是不变类,对其对象进行修改会新建一个对象,如果频繁修改将会产生很多的String对象,开销很大。修改字符串方面Java提供了一个StringBuffer类。
从以下几个方面阐述String类。
1) String的初始化
2) String的运算
3) String的格式化format
4) String类的常用方法
一、String的初始化
<span style="font-family:KaiTi_GB2312;font-size:14px;">//第1种方法
String str = "123";
//第2种方法
String str = new String(3);</span>
第1种方法存储在字符串池中。
第2种方法实例化了一个String类对象,此对象在存储在栈空间,栈空间存放了指向实例的堆空间地址。
二、String的运算
<span style="font-family:KaiTi_GB2312;font-size:14px;">package com.test.string;
public class TestString {
public static void main(String[] args) {
String str = "123";
System.out.println(str + 4); //1234
System.out.println(str + 4 + 5); //12345
System.out.println(4 + str + 5); //41235
System.out.println(4 + 5 + str); //9123
}
}
</span>
三、String的格式化format
<span style="font-family:KaiTi_GB2312;font-size:14px;">int age = 10;
String str = String.format("%s今年%d岁", "小明", age); //str="小明今年10岁"</span>
稍微有些基础就能举一反三,下面就不给例子了。
转换符 | 说明 | 示例 |
---|---|---|
%s | 字符串类型 | “hello” |
%c | 字符类型 | ‘c’ |
%b | 布尔类型 | true |
%d | 整数十进制 | 99 |
%x | 整数十六进制 | 0xFF |
%o | 整数八进制 | 77 |
%f | 浮点类型 | 99.99 |
%% | 百分比类型 | |
%n | 换行符 | |
我们一般是转换符和标志一起使用
标志 | 说明 | 示例 | 结果 |
---|---|---|---|
+ | 为正数或负数加符号 | ("%+d", 15) | +15 |
- | 左对齐 | ("%-5d", 15) | |15 | |
0 | 数字前面补0 | ("%04d", 15) | 0015 |
空格 | 在整数之前添加指定数量的空格 | ("% 4d", 15) | | 15| |
, | 以“,”对数字分组 | ("%,f", 1234.56) | 1,234.560000 |
( | 使用“(”包含负数 | ("%(d", -99) | (99) |
# | 如果是浮点添加小数 如果是16进制添加0x 如果是8进制添加0 | ("%#f", 99) ("%#x", 12) ("%#o", 10) | 99.000000 0x0C 012 |
< | 格式化前一个转换符所描述的参数 | ("%f和%<3.2f", 99.123) | 99.123000和99.12 |
$ | 被格式化的参数索引 | ("%1$d,%2$s", 99, "abc") | 99,abc |
四、String类的常用方法
字符串序列从0到length()-1
1) char charAt(int index): 返回字符串index处的字符
<span style="font-family:KaiTi_GB2312;font-size:14px;">String str = "abcdedf";
System.out.println(str.charAt(1)); //b</span>
2) int compareTo(String anotherString):
两字符串进行比较,相等时返回0,遇到第一个不相等字符时返回它们的字符差,若两者元素一样但是长度不等则返回两者长度差。
总的来说,相等时返回0,anotherString大时返回负数,anotherString小时返回正数。
<span style="font-family:KaiTi_GB2312;font-size:14px;">String str1 = "abcdedf";
String str2 = "abcgggg";
System.out.println(str1.compareTo(str2)); //3
System.out.println(str2.compareTo(str1)); //-3
System.out.println("abc".compareTo("a")); //2</span>
3) String concat(String str):将该String对象和str连接在一起。
4) boolean contentEquals(StringBuffer sb) :将String对象和StringBuffer对象进行比较
5) static String copyValueOf(char[] data) ;
static String copyValueOf(char[] data, int offset, int count) ;
将char数组转换成String。
6) boolean endsWith(String suffix); 此String对象是否以suffix结尾。
7) boolean equals(Object anObject); 当anObject不为空并且与当前String对象一样,返回true;否则,返回false。
8) byte[] getBytes(); 将此String对象转换成byte数组。
9) void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) :
该方法将字符串拷贝到字符数组中。其中,srcBegin为拷贝的起始位置、srcEnd为拷贝的结束位置、字符串数值dst为目标字符数组、dstBegin为目标字符数组的拷贝起始位置。
<span style="font-family:KaiTi_GB2312;font-size:14px;">char[] s1 = {'I',' ','l','o','v','e',' ','h','e','r','!'}; //s1=I love her!
String s2 = new String("you!");
s2.getChars(0,3,s1,7);
System.out.println( s1 );</span>
10) int indexOf(int ch) :只找第一个匹配字符位置。
int indexOf(int ch, int fromIndex) :从fromIndex开始找第一个匹配字符位置。
int indexOf(String str) :只找第一个匹配字符串位置。
<span style="font-family:KaiTi_GB2312;font-size:14px;">String s = new String("write once, run anywhere!");
String ss = new String("run");
System.out.println("s.indexOf('r'): " + s.indexOf('r') );
System.out.println("s.indexOf('r',2): " + s.indexOf('r',2) );
System.out.println("s.indexOf(ss): " + s.indexOf(ss) );</span>
结果为:s.indexOf('r'): 1s.indexOf('r',2): 12
s.indexOf(ss): 12
11) int lastIndexOf(int ch)
int lastIndexOf(int ch, int fromIndex)
int lastIndexOf(String str)
int lastIndexOf(String str, int fromIndex)
以上四个方法与10类似,不同的是:找最后一个匹配的内容。
<span style="font-family:KaiTi_GB2312;font-size:14px;">public class CompareToDemo {
public static void main (String[] args) {
String s1 = new String("acbdebfg");
System.out.println(s1.lastIndexOf((int)'b',7)); //5</span>
<span style="font-family:KaiTi_GB2312;font-size:14px;"> }</span>
<span style="font-family:KaiTi_GB2312;font-size:14px;">}</span>
12) int length() :返回当前字符串长度。
13) String replace(char oldChar, char newChar) :将字符号串中oldChar替换成newChar。
14) boolean startsWith(String prefix) :该String对象是否以prefix开始
boolean startsWith(String prefix, int toffset) :该String对象从toffset位置算起,是否以prefix开始。
15) String substring(int beginIndex) :取从beginIndex位置开始到结束的子字符串
String substring(int beginIndex, int endIndex) :取从beginIndex位置开始到endIndex位置的子字符串,包括beginIndex位置字符 不包括endIndex位置字符
<span style="font-family:KaiTi_GB2312;font-size:14px;">package com.test.string;
public class TestString {
public static void main(String[] args) {
String s1 = "Hello";
System.out.println(s1.substring(2)); //llo
System.out.println(s1.substring(3,4)); //l
}
}
</span>
16) char[ ] toCharArray() :将该String对象转换成char数组
17) String toLowerCase() :将字符串转换成小写。
String toUpperCase() :将字符串转换成大写。
18) static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(char[] data)
static String valueOf(char[] data, int offset, int count)
static String valueOf(double d)
static String valueOf(float f)
static String valueOf(int i)
static String valueOf(long l)
static String valueOf(Object obj)
以上方法用于将各种不同类型转换成Java字符型。这些都是类方法。