- 浏览: 24023 次
- 性别:
- 来自: 南昌
文章分类
最新评论
先提及一下数组, 与 C++ 不同的是, Java 中所有的数组都是动态分配存储空间。一但分配了存储空间,就不能在程序中改变数组长度,但可以用 new 重新分配空间。在 Java 中,数组是一种类,有自己的属性和方法。比较常用的是 length 方法,用于返回数组的长度。
回忆一下严蔚敏 C 语言描述的《数据结构》(第二版),都有哪几种数据结构?
常见的是:
1. 线性表(包括顺序表和链表)
2. 堆栈和队列
3. 串
4. 数组和广义表
5. 树和二叉树
6. 图
既然数组在 Java 中封装成类,不难发现,其实这些数据结构在 java 中全部封装成了类。串也不例外,所以也封装成了类。
字符串类—— String 类和 StringBuffer 类
程序中用到的字符串可以分为两类:
1. String 类:创建之后不能再修改和变动的字符串常量。
String 被 java 的开发者构造得非常接近基本数据类型,换句话说,在很多时候可以象使用基本数据类型一样来使用 String 类,例如:
// 声明了一个空字符串 s
String s ;
String ss = ” 创建了一个字符串 ”;
// 声明了一个空字符串 s
String s = new String();
String ss = new String(” 创建了一个字符串 ”);
String []sa = new String[]{” 创建了一个字符串 ”, “ 数组 ”};
常用的方法有:
int length() // 返回字符串长度
boolean equals(Object anObject) // 比较字符串相等
String substring(int beginIndex) // 返回从 beginindex 开始的子串。
String substring(int beginIndex,int endIndex) // 返回从 beginIndex 到 endIndex 的子串
char charAt(int index) // 返回 index 指定位置的字符
int indexOf(String str) // 返回 str 在字符串第一次出现的位置
String replace(char oldChar,char newChar) // 替换字符串中所有的 oldChar 子串
更多方法请查阅本文《附录 1 : String 类的常用方法》
2. StringBuffer 类:创建之后可以修改和变动的字符串变量。即能插入字符,也能追加字符到串尾。 StringBuffer 类对象的长度是可变的(即 StringBuff 是可变长的字符串对象 )。
常用方法有:
int length(); // 获取当前对象的长度
int capacity(); // 获取当前对象的容量。
StringBuff append( …… ); // 将对象,字符串等添加到 StringBuff 对象中去。
StringBuff insert(int offset, …… ); // 将对象,字符串等插入到指定的位置。
其中主要的方法是 append 和 insert ,可以重载和接收任何类型的数据。
String 类和 StringBuffer 类都在 java 的 lang 包中,并被定义为最终类,不能再派生子类。
如果你只是了解一下,可以到此为止。如果你想深入理解字符串类,请继续下去。
本文框架(本文由以下内容构成):
String 类(构造方法,常用方法,实例)
StringBuffer 类(构造方法,常用方法,实例)
字符串类总结(特点比较)
附录 1 : String 类的常用方法(表格形式,方便查询)
附录 2 : StringTokenizer 类(扩展知识)
String 类
一、 String 类——常用构造方法
String() 用来创建一个空的字符串常量
String(String str) 利用一个已经存在的字符串常量,来创建一个新的 String 对象
String(StringBuffer buf) 利用一个已经存在的 StringBuffer 对象,来创建新的 String 对象
String(char c[]) 利用已经存在的字符数组的内容,来创建新的 String 对象
其原型是:
1. 用扩在双引号 (“”) 里面的一串字符串做参数构造字符串
Public String(String value);
2. 用字符作为构造函数
Public String(char value[]);
Public String(char value, int offset, int count);
3. 用指定的缓冲字符串对象 buffer 构造字符串对象
Public String(StringBuffer buffer);
4. 用字节数组作为参数构造字符串
Public String(byte[] bytes);
Public String(byte[] bytes, String enc);
Public String(byte[] bytes, int offset, int length);
Public String(byte[] bytes, int offset, int length, String enc);
举例
String str = new String(“I like Java”);
Char ch[] = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’};
String s1 = new String(ch); // s1 为 ”abcde”
String s2 = new String(ch, 2, 3); // s2 为 ”cde”
StringBuffer buff = new StringBuffer();
Buff.append(“a”);
Buff.append(“5.6”);
String s1 = new String(buff); // s1 为 ”a5.6”
二、 String 类——常用方法
1 ,求字符串长度
public int Length() // 用于获得当前字符串对象中字符的个数
例: String s = “ 欢迎使用 java 语言 ”;
Int len = s.length();
结果: len = 10
注: java 采用 Unicode 编码,每个字符为 16 为长,因此汉字和其他符号一样只占用一个字符。
2 ,字符串连接
public String concat(String str) // 用于将字符串 str 连接在当前字符串的尾部,并返回新的字符串
例: “to”.concat(“get”).concat(“her”) 的返回值为 ”together” 。
例: String str = “hello”;
str = str + “world” +2;
str 的值为 ”hello world 2”;
注:利用 ” + ” ,编译器讲自动把非字符串转换为字符串再进行连接。
3 ,字符串比较
boolean equals(Object o) // 用于将当前字符串与方法参数列表中给出的字符串对象 o 作比较,若相同则返回 true ,否则返回 false ,区分大小写
boolean equalsIgnoreCase(String str) // 用于将当前字符串与方法参数列表中给出的字符串对象 str 作比较,若相同则返回 true ,否则返回 false ,不区分大小写
int compareTo(String str) // 用于将当前字符串与参数中字符串对象 str 作比较,若完全相同则返回 0 ;若按字母顺序大于参数字符串,则返回一个大于 0 的整数;反之,则返回一个小于 0 的整数
int compareTo(Object object)
int compareToIgnoreCase(String str)
例: String str3 = “This”;
String str2 = “That”;
System.out.println(“ 结果 1 : ”+str3.equals(“this”)+”,”+str3.equalsIgnoreCase(”this”));
System.out.println(“ 结果 2 : ”+str2. compareTo (“that”)+”,”+str2. compareTo IgnoreCase(”that”));
输出:结果 1 : false, true;
结果 2 : -32,0;
注:在前文《 Java.lang 包—— Object 类》中使用关系运算符“ == ”判定两个 object ,作为继承了 object 类的字符串类,同理也可以用“ == ”判定两个字符串是否相等,并且其使用规则也一样。
4 ,转化字符串的大小写
Public String toLowerCase() // 将字符串中所有的大写字母转换成小写
Public String toUpperCase() , // 将字符串中所有的小写字母转换成大写
例如: StringCaseChange.java
public class StringCaseChange
{
public static void main(String[] args)
{
String str = "Hello world.This is a Java code.";
// 声明并初始化字符串
System.out.println("The str is :");
System.out.println(str);
System.out.println("to UpperCase:");
System.out.println(str.toUpperCase());
// 字符串对象 str 调用 toUpperCase() 方法,并输出返回值
System.out.println(str.toLowerCase());
// 字符串对象 str 调用 toLowerCase() 方法,并输出返回值
System.out.println(str);
// 输出原字符串 str
}
}
5 ,字符串截取
public char charAt(int index) // 返回 index 指定位置的字符
public String subString(int start) // 返回从 start 开始的子串。
public String subString(int start, int end) // 返回从 start 到 end 的子串
例: String str = “hello world”;
char charValue = str.charAt(2);
String s1 = str.subString(2);
String s2 = str.subString(6, 11);
结果: charValue = ‘1’;
s1 = “llo world”;
s2 = “world”;
注: start 和 end 的位置需特别小心。
6 ,判断一个字符的前缀和后缀
public boolean startsWith(String prefix) // 用于判断当前字符串的前缀,是否是指定的字符串对象 str ,若是则返回 true ,否则返回 false
public boolean endsWith(String suffix) // 用于判断当前字符串的后缀,是否是指定的字符串对象 str ,若是则返回 true ,否则返回 false
public boolean startsWith(String prefix, int offset)
注:偏移量从 0 开始计数。
综合例子 1 : String 类对象的创建及使用 StringDemo.java
public class StringDemo
{
String str1 = "Hello world!This is Java code."; // 声明并初始化字符串 str1
String str2; // 声明字符串 str2
String str3 = new String("This is Java code."); // 声明并初始化字符串 str3
public StringDemo()
{
str2 = new String("This is Java code.");
// 创建字符串对象 str2 并初始化
System.out.println("str1 is: "+str1);
System.out.println("str2 is: "+str2);
System.out.println("str3 is: "+str3+"\n");
System.out.println("Each item of str1 is:");
for(int i=0;i<str1.length();i++)
{ // 使用 charAt() 方法得到 String 字符串中指定位置的字符,并利用循环分别输出
char c = str1.charAt(i);
System.out.print("\""+c+"\",");
if((i+1)==0) System.out.println();
}
System.out.println();
byte b[] = str1.getBytes();
// 使用 String 类的 getBytes() 方法,得到 str1 中所有字符对应的 Unicode 编码,并存入 byte 型数组 b 中
System.out.println("Change each item of str1 to unicode is:");
for(int i=0;i<b.length;i++)
{ // 利用循环分别输出 str1 中,所有元素对应的字符的 Unicode 编码
System.out.print(b[i]+",");
if((i+1)==0) System.out.println();
}
System.out.println();
System.out.print("The result of comparing str2 and str3 is:");
System.out.println(str2.equals(str3));
// 将字符串对象 str2 与 str3 进行比较,并将返回值输出
System.out.println("\nReplace all charcters \"a\" to \"e\" in str2");
System.out.println("The result of str2.replace() is:"+str2.replace('a','e'));
// 将字符串 str2 调用 replace() 方法的结果输出
System.out.println("str2 is: "+str2+"\n");
System.out.print("The result of whether str1 is beginning with \"Hello\":");
System.out.println(str1.startsWith("Hello"));
System.out.print("The result of whether str3 is end with \"code.\":");
System.out.println(str3.startsWith("code."));
}
public static void main(String[] args)
{
StringDemo stringDemo = new StringDemo();
}
}
综合例子 2 : String 类部分方法测试 StringMethodDemo.java
public class StringMethodDemo
{
public static void main(String[] args)
{
String str1 = "abc";
String str2 = "aab";
String str3 = "abd";
String str4 = "abc";
String str5 = "ABC";
String str6 = "abcdefgabcde";
// 以上完成字符串的声明及初始化
int i = str1.compareTo(str2);
int j = str1.compareTo(str3);
int k = str1.compareTo(str4);
// 以上调用 String 的 compareTo() 方法来比较字符串
System.out.println("str1 is:"+str1);
System.out.println("str2 is:"+str2);
System.out.println("str3 is:"+str3);
System.out.println("str4 is:"+str4);
System.out.println("str5 is:"+str5);
System.out.println("str6 is:"+str6);
System.out.print("The result of str1 compareTo str2 is:");
System.out.println(i);
System.out.print("The result of str1 compareTo str3 is:");
System.out.println(j);
System.out.print("The result of str1 compareTo str4 is:");
System.out.println(k);
System.out.print("The result of str1 equals str5 is:");
System.out.println(str1.equals(str5));
// 调用 String 的 equals() 方法来比较字符串
System.out.print("The result of str1 equalsIgnoreCase str5 is:");
System.out.println(str1.equalsIgnoreCase(str5));
// 调用 String 的 equalsIgnoreCase() 方法来比较字符串
int m = str6.indexOf((int)'d');
// 调用 String 的 indexOf() 方法,返回字符 'd' 第一次出现的位置
System.out.println("The char \"d\" first appear position is :"+m);
int n = str6.indexOf((int)'d',4);
// 调用 String 的 indexOf() 方法,返回字符 'd' 从第四位后,首次出现的位置
System.out.println("After 4th position The char\"d\"appear position is:"+n);
}
}
三、 String 类——查找指定字符、字符串和替换
由于检索对字符串特别重要,为突出其重要性,故单独列出。
1 ,查找字符
int indexOf(char a) // 用于查找并返回当前字符串中,某个特定字符 a 第一次出现的位置
int indexOf(char a,int b) // 用于从当前字符串中,自 b 位个字符之后向后查找并返回某个特定字符 a 第一次出现的位置
int lastIndexOf(char a) // 用于查找并返回当前字符串中,某个特定字符 a 最后一次出现的位置
int lastIndexOf(char a, int b) // 用于从当前字符串中,自 b 位个字符之后向后查找并返回某个特定字符 a 最后一次出现的位置
2 ,查找字符串
int indexOf(String str) // 用于查找并返回当前字符串中,某个特定字符串 str 第一次出现的位置
int indexOf(String str,int a) // 用于从当前字符串中,自 a 位个字符之后向后查找并返回某个特定字符串 str 第一次出现的位置
int lastIndexOf(String str) // 用于查找并返回当前字符串中,某个特定字符串 str 最后一次出现的位置
int lastIndexOf(String str int a) // 用于从当前字符串中,自 a 位个字符之后向后查找并返回某个特定字符串 str ,最后一次出现位置
例如: StringSearchDemo.java
public class StringSearchDemo
{
public static void main(String[] args)
{
String str1 = "Hello world.This is a Java code.we will program Java code.";
String searchStr = "Java code";
// 以上声明创建了字符串对象
int i = str1.indexOf(searchStr);
// 在字符串 str1 中,查找并返回字符串对象 searchStr 的位置
int j = str1.indexOf(searchStr,str1.indexOf("we"));
// 在字符串 str1 中,从字符串 "we" 开始,查找并返回字符串对象 searchStr 的位置
int m = str1.lastIndexOf(searchStr);
// 在字符串 str1 中,查找并返回字符串对象 searchStr 最后一次出现的位置
System.out.println("str1 is:"+str1);
System.out.println("searchStr is:"+searchStr);
System.out.println("i = str1.indexOf(searchStr):"+i);
System.out.println("j=str1.indexOf(searchStr,str1.indexOf(\"we\")):"+j);
System.out.println("m = str1.lastIndexOf(searchStr):"+m);
}
}
3 ,替换字符(包括字符串)
String replace(char c1,char c2) // 用于将当前字符串中的所有 c1 指定的字符替换为 c2 指定的字符,并返回新的字符串
四、 String 类——字符串转换为字节数组或字符数组
1 ,字节数组
byte [] getBytes();
byte [] getBytes(String enc); //enc 是字符集编码
2 ,字符数组
char [] toCharArray();
char [] toCharArray(int srcBegin, int srcEnd, char[] dst, int dstBegin);
例: byte byteArr[];
char charArr[];
String str = "This is s test string";
byteArr = str.getBytes();
charArr = str.toCharArray();
源码: StringToArray.java
public class StringToArray{
public static void main(String[] args){
String s="ABCDE";
byte b[]=s.getBytes();
System.out.println("\t"+s);
for(int i=0;i<b.length;i++)
System.out.print("\t"+b[i]);
System.out.println();
char ch0[]=s.toCharArray();
myPrint(ch0);
char ch1[]=new char[3];
s.getChars(1,4,ch1,0);
myPrint(ch1);
}
static void myPrint(char[] obj){
for(int i=0;i<obj.length;i++)
System.out.print("\t"+obj[i]);
System.out.println();
}
}
StringBuffer 类
StringBuffer 类是可变字符串类,创建 StringBuffer 类的对象后,可以随意修改、变更字符串的内容。每个 StringBuffer 类 的对象,都能够存储指定容量的字符串,如果字符串的长度超过了 StringBuffer 类对象的容量,则该对象的容量会自动的扩大。
一、 StringBuffer 类——构造方法
StringBuffer() // 用于创建一个空的 StringBuffer 对象
StringBuffer(int length) // 用于创建一个长度为 length 的 StringBuffer 对象
StringBuffer(String str) // 返回一个字符串,初始化为 s ,长度为 s.length()+16 个字节
例: StringBuffer sb = new StringBuffer();
StringBuffer sb = new StringBuffer(32);
StringBuffer sb = new StringBuffer(“I like this”);
注:系统为 String 类对象分配内存是,按照对象中所含字符的实际个数等量分配。而 StringBuffer 类对象分配内存时,出去字符所占空间外,再另加 16 个字符大小的缓冲区。
二、StringBuffer 类——主要方法(全为 public )
1 ,获得长度、容量和设置长度
int capacity() // 用于获取可变字符串的当前容量,值为字符串长度 +16
void setLength(int a) // 用于设置当前可变字符串的长度
int length() // 用于获取可变字符串的长度,值为字符串长度
例: StringBuffer buf = new StringBuffer(“0123”);
buf.length() = 4;
buf.capacity() = 4 + 16 = 20;
一般 StringBuffer 的长度 (length) 是指存储在其中的字符个数,容量 (capacity) 是指缓冲区所能容纳的最大字符数。
2 , append 、 replace 、 reverse
StringBuffer append(Object obj) // 将对象参数以字符串的方式,加入到当前可变字符串中
StringBuffer append(String str) // 将给定的字符串,追加到当前可变字符串中
StringBuffer append(StringBuffer sb) // 将给定的可变字符串,追加到当前可变字符串中
StringBuffer replace(int a,int b,String str)// 使用新的字符串 str ,替换当前可变字符串中,起始位置为 a ,结束位置为 b 之间的内容
StringBuffer reverse(int start, int end, String str)
注: append 共有 11 个方法,上面仅列出常见的 3 个。
3 , insert 、 delete
StringBuffer insert(int offset,Object obj) // 将对象参数以字符串的方式,插入到当前可变字符串中指定位置
StringBuffer insert(int offset,String str) // 将给定字符串,插入到当前可变字符串中指定位置
StringBuffer delete(int a,int b) // 用于删除掉当前可变字符串中,起始位置为 a ,结束位置为 b 之间的内容
StringBuffer deleteCharAt(int a) // 用于删除指定索引位置处的字符
void setCharAt(int a,char ch) // 将给定字符 ch ,插入到当前可变字符串中指定索引位置处
4 ,其他
String toString() // 获得一个字符串常量来代表当前可变字符串
String substring(int start)
String substring(int start , int end);
注: insert 共有 10 个方法,上面仅列出常见的 2 个。
三、实例
1, StringBuffer 类的创建和使用
例如: StringBuffer 类对象的创建及使用 StringBufferDemo.java
public class StringBufferDemo
{
StringBuffer strBuf1 = new StringBuffer("Hello world!");
// 声明、创建并初始化 StringBuffer 类的对象 strBuf1
StringBuffer strBuf2;
// 声明 StringBuffer 类的对象 strBuf2
StringBuffer strBuf3 = new StringBuffer(10);
// 声明并创建 StringBuffer 类的对象 strBuf3 ,并设定其长度为 10
public StringBufferDemo()
{
strBuf2 = new StringBuffer("This is Java code.");
// 创建并初始化 StringBuffer 类的对象 strBuf2
strBuf3 = new StringBuffer("Hello");
// 创建并初始化 StringBuffer 类的对象 strBuf3
String output = "strBuf1:"+strBuf1.toString()+"\nlength="+ strBuf1.
length()+"\ncapacity="+strBuf1.capacity();
// 使用 StringBuffer 类的方法 toString() ,将 StringBuffer 类对象转化为 String
型字符串
// 使用 StringBuffer 类的方法 length() ,来获得该可变字符串的长度
// 使用 StringBuffer 类的方法 capacity() ,来获得该可变字符串的最大存储容量
System.out.println(output);
strBuf1.setLength(30);
// 使用 StringBuffer 类的方法 setLength() ,来设置可变字符串的长度
System.out.print("After add strBuf1's length,");
System.out.println("strBuf1's capacity is:"+strBuf1.length());
strBuf1.ensureCapacity(60);
// 使用 StringBuffer 类的方法 ensureCapacity() ,来设置可变字符串的最大存储容量
System.out.print("Set strBuf1's capacity,");
System.out.println("Now strBuf1's capacity is:"+strBuf1.capacity());
System.out.println();
System.out.println("strBuf2:"+strBuf2.toString());
System.out.println("Char at 0 in strBuf2 is:"+strBuf2.charAt(0));
System.out.println("Char at 9 in strBuf2 is:"+strBuf2.charAt(9));
char ch[] = new char[strBuf2.length()];
strBuf2.getChars(8,12,ch,0);
// 使用 StringBuffer 类的方法 getChars() ,来获取 strBuf2 中第 8 ~ 12 位的字符
System.out.println("The char from 8 to 12 is:");
for(int i=0;i<4;i++)
{
System.out.print("\""+ch[i]+"\",");
}
System.out.println("\n");
System.out.println("strBuf3:"+strBuf3.toString());
System.out.print("After append string to strBuf3,");
strBuf3.append(" world.StringBufferDemo!");
// 使用 StringBuffer 类的方法 append() ,在 strBuf3 末尾插入字符串
System.out.println("New strBuf3:\n"+strBuf3.toString());
System.out.print("After set the 5th char,");
strBuf3.setCharAt(11,'!');
// 使用 StringBuffer 类的方法 setCharAt() ,来更改 strBuf3 中第 11 位的字符
System.out.println("the new strBuf3:\n"+strBuf3.toString());
}
public static void main(String[] args)
{
StringBufferDemo stringBufferDemo = new StringBufferDemo();
}
}
2 , StringBuffer 类的插入和删除操作
例如: StringBuffer 类插入和删除方法的使用 InsertDeleteDemo.java
public class InsertDeleteDemo
{
public static void main(String[] args)
{
String str = "Hello";
// 声明并初始化字符串对象 str
char ch[] = {'a','b','c','d','e','f','g'};
// 声明并初始化字符数组 ch
boolean b = true;
// 声明并初始化布尔型变量 b
int a = 10000;
// 声明并初始化整型变量 a
float f = 24.24f;
// 声明并初始化单精度变量 f
double d = 33.3333;
// 声明并初始化双精度变量 d
StringBuffer buffer = new StringBuffer();
// 声明并初始化可变字符串对象 buffer
buffer.insert(0,d);
// 使用 StringBuffer 类中 insert() 方法,向 buffer 第 0 个位置插入各种类型值
buffer.insert(0," ");
buffer.insert(0,f);
buffer.insert(0," ");
buffer.insert(0,a);
buffer.insert(0," ");
buffer.insert(0,b);
buffer.insert(0," ");
buffer.insert(0,ch);
buffer.insert(0," ");
buffer.insert(0,str);
System.out.println(buffer.toString()+"\n");
buffer.deleteCharAt(6);
// 使用 StringBuffer 类中 deleteCharAt() 方法,删除 buffer 中第 6 个位置的字符
System.out.println(buffer.toString()+"\n");
buffer.delete(5,12);
// 使用 StringBuffer 类中 delete() 方法,删除 buffer 中第 5 个位置至第 11 位置之间的字符
System.out.println(buffer.toString()+"\n");
}
}
字符串类总结
1, 如果创建一个字符串,不打算修改它,用 String 。
2, 如果创建一个字符串,计划修改它,用 StringBuffer 。
3, String 比 StringBuffer 执行效率高。
4, StringBuffer 比 String 方便。
附录1 :String 类的常用方法
方法
说明
char charAt(int index)
获取给定的Index 处的字符
int compareTo(String anotherString)
按照字典的方式比较两个字符串
int compareToIgnoreCase(String str)
按照字典的方式比较两个字符串, 忽略大小写
String concat(String str )
将给定的字符串连接到这个字符串的末尾
static String copyValueOf(char[ ] data)
创建一个和给定字符数组相同的String 对象
static String copyValueOf(char[ ]data ,int offset,int count)
使用偏移量,创建一个和给定字符数组相同的String 对象
boolean equals(Object anObject)
将这个String 对象和另一个对象String 进行比较
boolean equalsIgnoreCase(Sting anotherString)
将这个String 对象和另一个对象String 进行比较, 忽略大小写
void getChars(getChars(int strbegin,int strend,char[ ] data,int offset)
将这个字符串的字符拷贝到目的数组
int indexOf(int char)
产生这个字符串中出现给定字符的第一个位置的索引
int indexOf(int ch,int fromIndex)
从给定的索引处开始,产生这个字符串中出现给定字符的第一个位置的索引
int indexOf(String str)
产生这个字符串中出现给定子字符的第一个位置的索引
int indexOf(String str,int fromIndex)
从给定的索引处开始,产生这个字符串中出现给定子字符的第一个位置的索引
int length( )
产生这个字符串的长度
boolean regionMatches(boolean ignoreCase,int toffset,String other,int ooffset,int len)
检查两个字符串区域是否相等,允许忽略大小写
String replace(char oldChar,char newChar)
通过将这个字符串中的odChar 字符转换为newChar 字符来创建一个新字符串
boolean starsWith(String prefix)
检查这个字符串是否以给定的前缀开头
boolean starsWith(String prefix,int toffset)
从给定的索引处开头,检查这个字符串是否以给定的前缀开头
String substring(int strbegin)
产生一个新字符串,它是这个字符串的子字符串
String substring(int strbegin,int strend)
产生一个新字符串,它是这个字符串的子字符串,允许指定结尾处的索引
char[ ] toCharArray( )
将这个字符串转换为新的字符数组
String toLowerCase( )
将这个String 对象中的所有字符变为小写
String toString( )
返回这个对象(它已经是一个字符串)
String toUpperCase( )
将这个String 对象中的所有字符变为大写
String trim( )
去掉字符串开头和结尾的空格
static String valueOf(int i)
将int 参数转化为字符串返回。该方法有很多重载方法,用来将基本数据类型转化为字符串。如:static String valueOf(float f) ,static String valueOf(long l) 等
附录 2 : StringTokenizer 类
Java 语言中,提供了专门用来分析字符串的类 StringTokenizer (位于 java.util 包中)。该类可以将字符串分解为独立使用的单词,并称之为语言符号。语言符号之间由定界符( delim )或者是空格、制表符、换行符等典型的空白字符来分隔。其他的字符也同样可以设定为定界符。
1 , StringTokenizer 类的构造方法
StringTokenizer(String str) // 为字符串 str 构造一个字符串分析器。使用默认的定界符,即空格符(如果有多个连续的空格符,则看作是一个)、换行符、回车符、 Tab 符号等
StringTokenizer(String str, String delim) // 为字符串 str 构造一个字符串分析器,并使用字符串 delim 作为定界符
2 , StringTokenizer 类的主要方法
String nextToken() // 用于逐个获取字符串中的语言符号(单词)
boolean hasMoreTokens() // 用于判断所要分析的字符串中,是否还有语言符号,如果有则返回 true ,反之返回 false
int countTokens() // 用于得到所要分析的字符串中,一共含有多少个语言符号
3 ,举例说明 StringTokenizer 类、类中方法的使用。程序分析两个字符串,统计字符串中单词的个数。
例如: StringTokenizer 类的使用 StringTokenizerDemo.java
import java.util.*;
public class StringTokenizerDemo
{
public static void main(String[] args)
{
String str1 = "Hello world!This is Java code,stringTokenizer Demo.";
// 声明并初始化字符串 str1
String str2 = "How to use StringTokenizer?StringTokenizer?";
// 声明并初始化字符串 str2
StringTokenizer strT1 = new StringTokenizer(str1," ,.!");
// 创建 StringTokenizer 类的对象 strT1, 并构造字符串 str1 的分析器
// 以空格符、 "," 、 "." 及 "!" 作为定界符
StringTokenizer strT2 = new StringTokenizer(str2," ?");
// 创建 StringTokenizer 类的对象 strT2, 并构造字符串 str2 的分析器
// 以空格符及 "?" 作为定界符
int num1 = strT1.countTokens();
// 获取字符串 str1 中语言符号的个数
int num2 = strT2.countTokens();
// 获取字符串 str2 中语言符号的个数
System.out.println("str1 has "+num1+" words.They are:");
while(strT1.hasMoreTokens())
{ // 利用循环来获取字符串 str1 中下一个语言符号 , 并输出
String str = strT1.nextToken();
System.out.print("\""+str+"\" ");
}
System.out.println("\nstr2 has "+num2+" words.They are:");
while(strT2.hasMoreTokens())
{ // 利用循环来获取字符串 str2 中下一个语言符号 , 并输出
String str = strT2.nextToken();
System.out.print("\""+str+"\" ");
}
}
}
回忆一下严蔚敏 C 语言描述的《数据结构》(第二版),都有哪几种数据结构?
常见的是:
1. 线性表(包括顺序表和链表)
2. 堆栈和队列
3. 串
4. 数组和广义表
5. 树和二叉树
6. 图
既然数组在 Java 中封装成类,不难发现,其实这些数据结构在 java 中全部封装成了类。串也不例外,所以也封装成了类。
字符串类—— String 类和 StringBuffer 类
程序中用到的字符串可以分为两类:
1. String 类:创建之后不能再修改和变动的字符串常量。
String 被 java 的开发者构造得非常接近基本数据类型,换句话说,在很多时候可以象使用基本数据类型一样来使用 String 类,例如:
// 声明了一个空字符串 s
String s ;
String ss = ” 创建了一个字符串 ”;
// 声明了一个空字符串 s
String s = new String();
String ss = new String(” 创建了一个字符串 ”);
String []sa = new String[]{” 创建了一个字符串 ”, “ 数组 ”};
常用的方法有:
int length() // 返回字符串长度
boolean equals(Object anObject) // 比较字符串相等
String substring(int beginIndex) // 返回从 beginindex 开始的子串。
String substring(int beginIndex,int endIndex) // 返回从 beginIndex 到 endIndex 的子串
char charAt(int index) // 返回 index 指定位置的字符
int indexOf(String str) // 返回 str 在字符串第一次出现的位置
String replace(char oldChar,char newChar) // 替换字符串中所有的 oldChar 子串
更多方法请查阅本文《附录 1 : String 类的常用方法》
2. StringBuffer 类:创建之后可以修改和变动的字符串变量。即能插入字符,也能追加字符到串尾。 StringBuffer 类对象的长度是可变的(即 StringBuff 是可变长的字符串对象 )。
常用方法有:
int length(); // 获取当前对象的长度
int capacity(); // 获取当前对象的容量。
StringBuff append( …… ); // 将对象,字符串等添加到 StringBuff 对象中去。
StringBuff insert(int offset, …… ); // 将对象,字符串等插入到指定的位置。
其中主要的方法是 append 和 insert ,可以重载和接收任何类型的数据。
String 类和 StringBuffer 类都在 java 的 lang 包中,并被定义为最终类,不能再派生子类。
如果你只是了解一下,可以到此为止。如果你想深入理解字符串类,请继续下去。
本文框架(本文由以下内容构成):
String 类(构造方法,常用方法,实例)
StringBuffer 类(构造方法,常用方法,实例)
字符串类总结(特点比较)
附录 1 : String 类的常用方法(表格形式,方便查询)
附录 2 : StringTokenizer 类(扩展知识)
String 类
一、 String 类——常用构造方法
String() 用来创建一个空的字符串常量
String(String str) 利用一个已经存在的字符串常量,来创建一个新的 String 对象
String(StringBuffer buf) 利用一个已经存在的 StringBuffer 对象,来创建新的 String 对象
String(char c[]) 利用已经存在的字符数组的内容,来创建新的 String 对象
其原型是:
1. 用扩在双引号 (“”) 里面的一串字符串做参数构造字符串
Public String(String value);
2. 用字符作为构造函数
Public String(char value[]);
Public String(char value, int offset, int count);
3. 用指定的缓冲字符串对象 buffer 构造字符串对象
Public String(StringBuffer buffer);
4. 用字节数组作为参数构造字符串
Public String(byte[] bytes);
Public String(byte[] bytes, String enc);
Public String(byte[] bytes, int offset, int length);
Public String(byte[] bytes, int offset, int length, String enc);
举例
String str = new String(“I like Java”);
Char ch[] = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’};
String s1 = new String(ch); // s1 为 ”abcde”
String s2 = new String(ch, 2, 3); // s2 为 ”cde”
StringBuffer buff = new StringBuffer();
Buff.append(“a”);
Buff.append(“5.6”);
String s1 = new String(buff); // s1 为 ”a5.6”
二、 String 类——常用方法
1 ,求字符串长度
public int Length() // 用于获得当前字符串对象中字符的个数
例: String s = “ 欢迎使用 java 语言 ”;
Int len = s.length();
结果: len = 10
注: java 采用 Unicode 编码,每个字符为 16 为长,因此汉字和其他符号一样只占用一个字符。
2 ,字符串连接
public String concat(String str) // 用于将字符串 str 连接在当前字符串的尾部,并返回新的字符串
例: “to”.concat(“get”).concat(“her”) 的返回值为 ”together” 。
例: String str = “hello”;
str = str + “world” +2;
str 的值为 ”hello world 2”;
注:利用 ” + ” ,编译器讲自动把非字符串转换为字符串再进行连接。
3 ,字符串比较
boolean equals(Object o) // 用于将当前字符串与方法参数列表中给出的字符串对象 o 作比较,若相同则返回 true ,否则返回 false ,区分大小写
boolean equalsIgnoreCase(String str) // 用于将当前字符串与方法参数列表中给出的字符串对象 str 作比较,若相同则返回 true ,否则返回 false ,不区分大小写
int compareTo(String str) // 用于将当前字符串与参数中字符串对象 str 作比较,若完全相同则返回 0 ;若按字母顺序大于参数字符串,则返回一个大于 0 的整数;反之,则返回一个小于 0 的整数
int compareTo(Object object)
int compareToIgnoreCase(String str)
例: String str3 = “This”;
String str2 = “That”;
System.out.println(“ 结果 1 : ”+str3.equals(“this”)+”,”+str3.equalsIgnoreCase(”this”));
System.out.println(“ 结果 2 : ”+str2. compareTo (“that”)+”,”+str2. compareTo IgnoreCase(”that”));
输出:结果 1 : false, true;
结果 2 : -32,0;
注:在前文《 Java.lang 包—— Object 类》中使用关系运算符“ == ”判定两个 object ,作为继承了 object 类的字符串类,同理也可以用“ == ”判定两个字符串是否相等,并且其使用规则也一样。
4 ,转化字符串的大小写
Public String toLowerCase() // 将字符串中所有的大写字母转换成小写
Public String toUpperCase() , // 将字符串中所有的小写字母转换成大写
例如: StringCaseChange.java
public class StringCaseChange
{
public static void main(String[] args)
{
String str = "Hello world.This is a Java code.";
// 声明并初始化字符串
System.out.println("The str is :");
System.out.println(str);
System.out.println("to UpperCase:");
System.out.println(str.toUpperCase());
// 字符串对象 str 调用 toUpperCase() 方法,并输出返回值
System.out.println(str.toLowerCase());
// 字符串对象 str 调用 toLowerCase() 方法,并输出返回值
System.out.println(str);
// 输出原字符串 str
}
}
5 ,字符串截取
public char charAt(int index) // 返回 index 指定位置的字符
public String subString(int start) // 返回从 start 开始的子串。
public String subString(int start, int end) // 返回从 start 到 end 的子串
例: String str = “hello world”;
char charValue = str.charAt(2);
String s1 = str.subString(2);
String s2 = str.subString(6, 11);
结果: charValue = ‘1’;
s1 = “llo world”;
s2 = “world”;
注: start 和 end 的位置需特别小心。
6 ,判断一个字符的前缀和后缀
public boolean startsWith(String prefix) // 用于判断当前字符串的前缀,是否是指定的字符串对象 str ,若是则返回 true ,否则返回 false
public boolean endsWith(String suffix) // 用于判断当前字符串的后缀,是否是指定的字符串对象 str ,若是则返回 true ,否则返回 false
public boolean startsWith(String prefix, int offset)
注:偏移量从 0 开始计数。
综合例子 1 : String 类对象的创建及使用 StringDemo.java
public class StringDemo
{
String str1 = "Hello world!This is Java code."; // 声明并初始化字符串 str1
String str2; // 声明字符串 str2
String str3 = new String("This is Java code."); // 声明并初始化字符串 str3
public StringDemo()
{
str2 = new String("This is Java code.");
// 创建字符串对象 str2 并初始化
System.out.println("str1 is: "+str1);
System.out.println("str2 is: "+str2);
System.out.println("str3 is: "+str3+"\n");
System.out.println("Each item of str1 is:");
for(int i=0;i<str1.length();i++)
{ // 使用 charAt() 方法得到 String 字符串中指定位置的字符,并利用循环分别输出
char c = str1.charAt(i);
System.out.print("\""+c+"\",");
if((i+1)==0) System.out.println();
}
System.out.println();
byte b[] = str1.getBytes();
// 使用 String 类的 getBytes() 方法,得到 str1 中所有字符对应的 Unicode 编码,并存入 byte 型数组 b 中
System.out.println("Change each item of str1 to unicode is:");
for(int i=0;i<b.length;i++)
{ // 利用循环分别输出 str1 中,所有元素对应的字符的 Unicode 编码
System.out.print(b[i]+",");
if((i+1)==0) System.out.println();
}
System.out.println();
System.out.print("The result of comparing str2 and str3 is:");
System.out.println(str2.equals(str3));
// 将字符串对象 str2 与 str3 进行比较,并将返回值输出
System.out.println("\nReplace all charcters \"a\" to \"e\" in str2");
System.out.println("The result of str2.replace() is:"+str2.replace('a','e'));
// 将字符串 str2 调用 replace() 方法的结果输出
System.out.println("str2 is: "+str2+"\n");
System.out.print("The result of whether str1 is beginning with \"Hello\":");
System.out.println(str1.startsWith("Hello"));
System.out.print("The result of whether str3 is end with \"code.\":");
System.out.println(str3.startsWith("code."));
}
public static void main(String[] args)
{
StringDemo stringDemo = new StringDemo();
}
}
综合例子 2 : String 类部分方法测试 StringMethodDemo.java
public class StringMethodDemo
{
public static void main(String[] args)
{
String str1 = "abc";
String str2 = "aab";
String str3 = "abd";
String str4 = "abc";
String str5 = "ABC";
String str6 = "abcdefgabcde";
// 以上完成字符串的声明及初始化
int i = str1.compareTo(str2);
int j = str1.compareTo(str3);
int k = str1.compareTo(str4);
// 以上调用 String 的 compareTo() 方法来比较字符串
System.out.println("str1 is:"+str1);
System.out.println("str2 is:"+str2);
System.out.println("str3 is:"+str3);
System.out.println("str4 is:"+str4);
System.out.println("str5 is:"+str5);
System.out.println("str6 is:"+str6);
System.out.print("The result of str1 compareTo str2 is:");
System.out.println(i);
System.out.print("The result of str1 compareTo str3 is:");
System.out.println(j);
System.out.print("The result of str1 compareTo str4 is:");
System.out.println(k);
System.out.print("The result of str1 equals str5 is:");
System.out.println(str1.equals(str5));
// 调用 String 的 equals() 方法来比较字符串
System.out.print("The result of str1 equalsIgnoreCase str5 is:");
System.out.println(str1.equalsIgnoreCase(str5));
// 调用 String 的 equalsIgnoreCase() 方法来比较字符串
int m = str6.indexOf((int)'d');
// 调用 String 的 indexOf() 方法,返回字符 'd' 第一次出现的位置
System.out.println("The char \"d\" first appear position is :"+m);
int n = str6.indexOf((int)'d',4);
// 调用 String 的 indexOf() 方法,返回字符 'd' 从第四位后,首次出现的位置
System.out.println("After 4th position The char\"d\"appear position is:"+n);
}
}
三、 String 类——查找指定字符、字符串和替换
由于检索对字符串特别重要,为突出其重要性,故单独列出。
1 ,查找字符
int indexOf(char a) // 用于查找并返回当前字符串中,某个特定字符 a 第一次出现的位置
int indexOf(char a,int b) // 用于从当前字符串中,自 b 位个字符之后向后查找并返回某个特定字符 a 第一次出现的位置
int lastIndexOf(char a) // 用于查找并返回当前字符串中,某个特定字符 a 最后一次出现的位置
int lastIndexOf(char a, int b) // 用于从当前字符串中,自 b 位个字符之后向后查找并返回某个特定字符 a 最后一次出现的位置
2 ,查找字符串
int indexOf(String str) // 用于查找并返回当前字符串中,某个特定字符串 str 第一次出现的位置
int indexOf(String str,int a) // 用于从当前字符串中,自 a 位个字符之后向后查找并返回某个特定字符串 str 第一次出现的位置
int lastIndexOf(String str) // 用于查找并返回当前字符串中,某个特定字符串 str 最后一次出现的位置
int lastIndexOf(String str int a) // 用于从当前字符串中,自 a 位个字符之后向后查找并返回某个特定字符串 str ,最后一次出现位置
例如: StringSearchDemo.java
public class StringSearchDemo
{
public static void main(String[] args)
{
String str1 = "Hello world.This is a Java code.we will program Java code.";
String searchStr = "Java code";
// 以上声明创建了字符串对象
int i = str1.indexOf(searchStr);
// 在字符串 str1 中,查找并返回字符串对象 searchStr 的位置
int j = str1.indexOf(searchStr,str1.indexOf("we"));
// 在字符串 str1 中,从字符串 "we" 开始,查找并返回字符串对象 searchStr 的位置
int m = str1.lastIndexOf(searchStr);
// 在字符串 str1 中,查找并返回字符串对象 searchStr 最后一次出现的位置
System.out.println("str1 is:"+str1);
System.out.println("searchStr is:"+searchStr);
System.out.println("i = str1.indexOf(searchStr):"+i);
System.out.println("j=str1.indexOf(searchStr,str1.indexOf(\"we\")):"+j);
System.out.println("m = str1.lastIndexOf(searchStr):"+m);
}
}
3 ,替换字符(包括字符串)
String replace(char c1,char c2) // 用于将当前字符串中的所有 c1 指定的字符替换为 c2 指定的字符,并返回新的字符串
四、 String 类——字符串转换为字节数组或字符数组
1 ,字节数组
byte [] getBytes();
byte [] getBytes(String enc); //enc 是字符集编码
2 ,字符数组
char [] toCharArray();
char [] toCharArray(int srcBegin, int srcEnd, char[] dst, int dstBegin);
例: byte byteArr[];
char charArr[];
String str = "This is s test string";
byteArr = str.getBytes();
charArr = str.toCharArray();
源码: StringToArray.java
public class StringToArray{
public static void main(String[] args){
String s="ABCDE";
byte b[]=s.getBytes();
System.out.println("\t"+s);
for(int i=0;i<b.length;i++)
System.out.print("\t"+b[i]);
System.out.println();
char ch0[]=s.toCharArray();
myPrint(ch0);
char ch1[]=new char[3];
s.getChars(1,4,ch1,0);
myPrint(ch1);
}
static void myPrint(char[] obj){
for(int i=0;i<obj.length;i++)
System.out.print("\t"+obj[i]);
System.out.println();
}
}
StringBuffer 类
StringBuffer 类是可变字符串类,创建 StringBuffer 类的对象后,可以随意修改、变更字符串的内容。每个 StringBuffer 类 的对象,都能够存储指定容量的字符串,如果字符串的长度超过了 StringBuffer 类对象的容量,则该对象的容量会自动的扩大。
一、 StringBuffer 类——构造方法
StringBuffer() // 用于创建一个空的 StringBuffer 对象
StringBuffer(int length) // 用于创建一个长度为 length 的 StringBuffer 对象
StringBuffer(String str) // 返回一个字符串,初始化为 s ,长度为 s.length()+16 个字节
例: StringBuffer sb = new StringBuffer();
StringBuffer sb = new StringBuffer(32);
StringBuffer sb = new StringBuffer(“I like this”);
注:系统为 String 类对象分配内存是,按照对象中所含字符的实际个数等量分配。而 StringBuffer 类对象分配内存时,出去字符所占空间外,再另加 16 个字符大小的缓冲区。
二、StringBuffer 类——主要方法(全为 public )
1 ,获得长度、容量和设置长度
int capacity() // 用于获取可变字符串的当前容量,值为字符串长度 +16
void setLength(int a) // 用于设置当前可变字符串的长度
int length() // 用于获取可变字符串的长度,值为字符串长度
例: StringBuffer buf = new StringBuffer(“0123”);
buf.length() = 4;
buf.capacity() = 4 + 16 = 20;
一般 StringBuffer 的长度 (length) 是指存储在其中的字符个数,容量 (capacity) 是指缓冲区所能容纳的最大字符数。
2 , append 、 replace 、 reverse
StringBuffer append(Object obj) // 将对象参数以字符串的方式,加入到当前可变字符串中
StringBuffer append(String str) // 将给定的字符串,追加到当前可变字符串中
StringBuffer append(StringBuffer sb) // 将给定的可变字符串,追加到当前可变字符串中
StringBuffer replace(int a,int b,String str)// 使用新的字符串 str ,替换当前可变字符串中,起始位置为 a ,结束位置为 b 之间的内容
StringBuffer reverse(int start, int end, String str)
注: append 共有 11 个方法,上面仅列出常见的 3 个。
3 , insert 、 delete
StringBuffer insert(int offset,Object obj) // 将对象参数以字符串的方式,插入到当前可变字符串中指定位置
StringBuffer insert(int offset,String str) // 将给定字符串,插入到当前可变字符串中指定位置
StringBuffer delete(int a,int b) // 用于删除掉当前可变字符串中,起始位置为 a ,结束位置为 b 之间的内容
StringBuffer deleteCharAt(int a) // 用于删除指定索引位置处的字符
void setCharAt(int a,char ch) // 将给定字符 ch ,插入到当前可变字符串中指定索引位置处
4 ,其他
String toString() // 获得一个字符串常量来代表当前可变字符串
String substring(int start)
String substring(int start , int end);
注: insert 共有 10 个方法,上面仅列出常见的 2 个。
三、实例
1, StringBuffer 类的创建和使用
例如: StringBuffer 类对象的创建及使用 StringBufferDemo.java
public class StringBufferDemo
{
StringBuffer strBuf1 = new StringBuffer("Hello world!");
// 声明、创建并初始化 StringBuffer 类的对象 strBuf1
StringBuffer strBuf2;
// 声明 StringBuffer 类的对象 strBuf2
StringBuffer strBuf3 = new StringBuffer(10);
// 声明并创建 StringBuffer 类的对象 strBuf3 ,并设定其长度为 10
public StringBufferDemo()
{
strBuf2 = new StringBuffer("This is Java code.");
// 创建并初始化 StringBuffer 类的对象 strBuf2
strBuf3 = new StringBuffer("Hello");
// 创建并初始化 StringBuffer 类的对象 strBuf3
String output = "strBuf1:"+strBuf1.toString()+"\nlength="+ strBuf1.
length()+"\ncapacity="+strBuf1.capacity();
// 使用 StringBuffer 类的方法 toString() ,将 StringBuffer 类对象转化为 String
型字符串
// 使用 StringBuffer 类的方法 length() ,来获得该可变字符串的长度
// 使用 StringBuffer 类的方法 capacity() ,来获得该可变字符串的最大存储容量
System.out.println(output);
strBuf1.setLength(30);
// 使用 StringBuffer 类的方法 setLength() ,来设置可变字符串的长度
System.out.print("After add strBuf1's length,");
System.out.println("strBuf1's capacity is:"+strBuf1.length());
strBuf1.ensureCapacity(60);
// 使用 StringBuffer 类的方法 ensureCapacity() ,来设置可变字符串的最大存储容量
System.out.print("Set strBuf1's capacity,");
System.out.println("Now strBuf1's capacity is:"+strBuf1.capacity());
System.out.println();
System.out.println("strBuf2:"+strBuf2.toString());
System.out.println("Char at 0 in strBuf2 is:"+strBuf2.charAt(0));
System.out.println("Char at 9 in strBuf2 is:"+strBuf2.charAt(9));
char ch[] = new char[strBuf2.length()];
strBuf2.getChars(8,12,ch,0);
// 使用 StringBuffer 类的方法 getChars() ,来获取 strBuf2 中第 8 ~ 12 位的字符
System.out.println("The char from 8 to 12 is:");
for(int i=0;i<4;i++)
{
System.out.print("\""+ch[i]+"\",");
}
System.out.println("\n");
System.out.println("strBuf3:"+strBuf3.toString());
System.out.print("After append string to strBuf3,");
strBuf3.append(" world.StringBufferDemo!");
// 使用 StringBuffer 类的方法 append() ,在 strBuf3 末尾插入字符串
System.out.println("New strBuf3:\n"+strBuf3.toString());
System.out.print("After set the 5th char,");
strBuf3.setCharAt(11,'!');
// 使用 StringBuffer 类的方法 setCharAt() ,来更改 strBuf3 中第 11 位的字符
System.out.println("the new strBuf3:\n"+strBuf3.toString());
}
public static void main(String[] args)
{
StringBufferDemo stringBufferDemo = new StringBufferDemo();
}
}
2 , StringBuffer 类的插入和删除操作
例如: StringBuffer 类插入和删除方法的使用 InsertDeleteDemo.java
public class InsertDeleteDemo
{
public static void main(String[] args)
{
String str = "Hello";
// 声明并初始化字符串对象 str
char ch[] = {'a','b','c','d','e','f','g'};
// 声明并初始化字符数组 ch
boolean b = true;
// 声明并初始化布尔型变量 b
int a = 10000;
// 声明并初始化整型变量 a
float f = 24.24f;
// 声明并初始化单精度变量 f
double d = 33.3333;
// 声明并初始化双精度变量 d
StringBuffer buffer = new StringBuffer();
// 声明并初始化可变字符串对象 buffer
buffer.insert(0,d);
// 使用 StringBuffer 类中 insert() 方法,向 buffer 第 0 个位置插入各种类型值
buffer.insert(0," ");
buffer.insert(0,f);
buffer.insert(0," ");
buffer.insert(0,a);
buffer.insert(0," ");
buffer.insert(0,b);
buffer.insert(0," ");
buffer.insert(0,ch);
buffer.insert(0," ");
buffer.insert(0,str);
System.out.println(buffer.toString()+"\n");
buffer.deleteCharAt(6);
// 使用 StringBuffer 类中 deleteCharAt() 方法,删除 buffer 中第 6 个位置的字符
System.out.println(buffer.toString()+"\n");
buffer.delete(5,12);
// 使用 StringBuffer 类中 delete() 方法,删除 buffer 中第 5 个位置至第 11 位置之间的字符
System.out.println(buffer.toString()+"\n");
}
}
字符串类总结
1, 如果创建一个字符串,不打算修改它,用 String 。
2, 如果创建一个字符串,计划修改它,用 StringBuffer 。
3, String 比 StringBuffer 执行效率高。
4, StringBuffer 比 String 方便。
附录1 :String 类的常用方法
方法
说明
char charAt(int index)
获取给定的Index 处的字符
int compareTo(String anotherString)
按照字典的方式比较两个字符串
int compareToIgnoreCase(String str)
按照字典的方式比较两个字符串, 忽略大小写
String concat(String str )
将给定的字符串连接到这个字符串的末尾
static String copyValueOf(char[ ] data)
创建一个和给定字符数组相同的String 对象
static String copyValueOf(char[ ]data ,int offset,int count)
使用偏移量,创建一个和给定字符数组相同的String 对象
boolean equals(Object anObject)
将这个String 对象和另一个对象String 进行比较
boolean equalsIgnoreCase(Sting anotherString)
将这个String 对象和另一个对象String 进行比较, 忽略大小写
void getChars(getChars(int strbegin,int strend,char[ ] data,int offset)
将这个字符串的字符拷贝到目的数组
int indexOf(int char)
产生这个字符串中出现给定字符的第一个位置的索引
int indexOf(int ch,int fromIndex)
从给定的索引处开始,产生这个字符串中出现给定字符的第一个位置的索引
int indexOf(String str)
产生这个字符串中出现给定子字符的第一个位置的索引
int indexOf(String str,int fromIndex)
从给定的索引处开始,产生这个字符串中出现给定子字符的第一个位置的索引
int length( )
产生这个字符串的长度
boolean regionMatches(boolean ignoreCase,int toffset,String other,int ooffset,int len)
检查两个字符串区域是否相等,允许忽略大小写
String replace(char oldChar,char newChar)
通过将这个字符串中的odChar 字符转换为newChar 字符来创建一个新字符串
boolean starsWith(String prefix)
检查这个字符串是否以给定的前缀开头
boolean starsWith(String prefix,int toffset)
从给定的索引处开头,检查这个字符串是否以给定的前缀开头
String substring(int strbegin)
产生一个新字符串,它是这个字符串的子字符串
String substring(int strbegin,int strend)
产生一个新字符串,它是这个字符串的子字符串,允许指定结尾处的索引
char[ ] toCharArray( )
将这个字符串转换为新的字符数组
String toLowerCase( )
将这个String 对象中的所有字符变为小写
String toString( )
返回这个对象(它已经是一个字符串)
String toUpperCase( )
将这个String 对象中的所有字符变为大写
String trim( )
去掉字符串开头和结尾的空格
static String valueOf(int i)
将int 参数转化为字符串返回。该方法有很多重载方法,用来将基本数据类型转化为字符串。如:static String valueOf(float f) ,static String valueOf(long l) 等
附录 2 : StringTokenizer 类
Java 语言中,提供了专门用来分析字符串的类 StringTokenizer (位于 java.util 包中)。该类可以将字符串分解为独立使用的单词,并称之为语言符号。语言符号之间由定界符( delim )或者是空格、制表符、换行符等典型的空白字符来分隔。其他的字符也同样可以设定为定界符。
1 , StringTokenizer 类的构造方法
StringTokenizer(String str) // 为字符串 str 构造一个字符串分析器。使用默认的定界符,即空格符(如果有多个连续的空格符,则看作是一个)、换行符、回车符、 Tab 符号等
StringTokenizer(String str, String delim) // 为字符串 str 构造一个字符串分析器,并使用字符串 delim 作为定界符
2 , StringTokenizer 类的主要方法
String nextToken() // 用于逐个获取字符串中的语言符号(单词)
boolean hasMoreTokens() // 用于判断所要分析的字符串中,是否还有语言符号,如果有则返回 true ,反之返回 false
int countTokens() // 用于得到所要分析的字符串中,一共含有多少个语言符号
3 ,举例说明 StringTokenizer 类、类中方法的使用。程序分析两个字符串,统计字符串中单词的个数。
例如: StringTokenizer 类的使用 StringTokenizerDemo.java
import java.util.*;
public class StringTokenizerDemo
{
public static void main(String[] args)
{
String str1 = "Hello world!This is Java code,stringTokenizer Demo.";
// 声明并初始化字符串 str1
String str2 = "How to use StringTokenizer?StringTokenizer?";
// 声明并初始化字符串 str2
StringTokenizer strT1 = new StringTokenizer(str1," ,.!");
// 创建 StringTokenizer 类的对象 strT1, 并构造字符串 str1 的分析器
// 以空格符、 "," 、 "." 及 "!" 作为定界符
StringTokenizer strT2 = new StringTokenizer(str2," ?");
// 创建 StringTokenizer 类的对象 strT2, 并构造字符串 str2 的分析器
// 以空格符及 "?" 作为定界符
int num1 = strT1.countTokens();
// 获取字符串 str1 中语言符号的个数
int num2 = strT2.countTokens();
// 获取字符串 str2 中语言符号的个数
System.out.println("str1 has "+num1+" words.They are:");
while(strT1.hasMoreTokens())
{ // 利用循环来获取字符串 str1 中下一个语言符号 , 并输出
String str = strT1.nextToken();
System.out.print("\""+str+"\" ");
}
System.out.println("\nstr2 has "+num2+" words.They are:");
while(strT2.hasMoreTokens())
{ // 利用循环来获取字符串 str2 中下一个语言符号 , 并输出
String str = strT2.nextToken();
System.out.print("\""+str+"\" ");
}
}
}
相关推荐
在Java编程语言中,`java.lang.String`是最重要的类之一,它是所有字符串操作的基础。这个类位于核心类库中,因此无需显式导入即可使用。本文将深入探讨`String`类的一些关键知识点,包括它的特性、构造方法、常用...
`String`类是`java.lang`包中的另一个重要组成部分,用于处理字符串。字符串在Java中是不可变的,这意味着一旦创建,就不能改变其内容。`String`类提供了许多操作字符串的方法,如`length()`获取字符串长度,`index...
`StringBuffer`类则提供线程安全的字符串操作,适用于多线程环境中的字符串构建。 `Character`类处理字符操作,包括判断字符类别、转换字符编码等。`Character.Subset`和`Character.UnicodeBlock`是Java 2新增的,...
1. **字符串操作**: Commons Lang 提供了 `StringUtils` 类,它包含了一系列静态方法,用于执行复杂的字符串操作,如空白字符处理、分割、连接、替换、比较等,这些方法比Java内置的String类功能更加强大。...
总的来说,这个北大青鸟的JAVA培训教程主要涵盖了Java编程的基础知识,包括核心的`java.lang`包的使用、包装类的理解与应用、字符串处理、数学运算、类的反射以及异常处理。这些内容对于初学者来说是非常重要的,...
String 类是 Java 语言中的字符串处理类,通过 String 对象来处理字符串。String 对象一旦被创建了,就不能被改变。如果需要进行大量的字符串操作,应该使用 StringBuffer 类或者字符数组,最终结果可以被转换成 ...
Java编程语言中的java.lang包是一个核心包,它提供了Java语言运行时的基础类库,包含了Java程序运行的基本数据类型、异常处理类以及一些用于系统级别的工具类和接口。java.lang包中的类和接口不需要程序员显示地导入...
- `java.lang.String` 类本身提供了大量字符串操作方法,如 `substring`、`indexOf`、`replace` 等。 - `java.lang.StringBuilder` 和 `java.lang.StringBuffer` 用于高效构建字符串,特别是多线程环境。 - `java...
在Java编程语言中,`java.lang`包是所有Java程序的基础,因为它包含了许多核心类和接口,这些类和接口是编写任何Java应用程序所必需的。由于这个包是自动导入的,因此程序员无需在代码中显式地导入`java.lang`。 1....
在本压缩包“字符串string.zip”中,主要包含的是与Java编程语言中字符串相关的教学资料,特别是针对S1课程的学员。这个课程旨在帮助学生深入理解程序逻辑,并且重点聚焦在Java中的字符串处理。文件“Chapter15”...
本文将深入探讨Java中字符串处理的相关知识点,包括`String`类型的特点、构造方法、字符串操作以及与`StringBuffer`的关系。 #### `String`类型概述 在Java中,`String`类型是不可变的,这意味着一旦一个`String`...
首先,`java.lang`包包含了基本数据类型的包装类,如`Boolean`, `Long`, `StrictMath`, `Byte`, `Math`, `String`, `Character`, `Number`, `StringBuffer`, `Class`, `Object`, `System`, `ClassLoader`, `Package`...
* String 类:Java.lang.String 类是 Java 中最基本的字符串类,提供了字符串操作的方法,如 equals、compareTo、substring、indexOf 等。 * StringBuffer 类:Java.lang.StringBuffer 类是一个可变字符串类,提供了...
首先,Java中的字符串实际上是一个表示`char`值序列的对象,它是由`java.lang.String`类定义的。字符串在内存中的处理非常特别,它们存储在称为“字符串常量池”的区域,这是一个优化内存使用的策略。当使用字符串...
Java标准库中的`java.lang`包提供了两个主要的字符串类:`String`和`StringBuffer`,它们各自有着不同的用途。 1. **字符串的概念**: - 字符串是内存中存储的一系列连续的字符。在Java中,字符串是对象,且它们...
Java语言提供了多种常用包和类,包括java.lang、String、StringBuffer、Math、Object、Class、Constructor、Method、Field、Date、Calendar、SimpleDateFormat、File等,这些包和类为Java开发提供了强大的支持。
- `java.lang.String`:Java中的不可变字符串类,包含大量字符串操作方法。 5. **异常处理工具类**: - `java.util.concurrent.atomic.AtomicReference`:在多线程环境中安全地引用对象,支持原子操作。 - `java...
而`StringBuffer`类提供了可变的字符串操作,适合在多线程环境下进行字符串拼接,以提高性能。 6. **Object类** - 所有Java类都直接或间接继承自`Object`类。`Object`提供了诸如`clone()`、`equals()`和`hashCode...
除了上述基本操作,Java String类还涉及到了字符串的比较。`equals()`方法用于比较两个字符串的内容是否相等,而`compareTo()`则基于Unicode值比较字符串。如果需要忽略大小写进行比较,可以使用`equalsIgnoreCase()...
StringBuffer 类是 Java 语言中的字符串缓冲器类,提供了一系列字符串操作的方法,如 append、insert、delete 等。 Object 类是 Java 语言中的对象类,提供了一系列对象操作的方法,如 equals、hashCode、toString ...