ITEEDU

入门准备

接触对象

对象导向

资源管理

对象容器(Container)

输入输出(I/O)

执行绪(Thread)

反射(Reflection)

metadata

数据库(JDBC)

舍遗补缺

Java Gossip: String 类别

由字符所组成的一串文字符号,称之为字符串,在Java中字符串可以使用String类别来建构,例如您可以使用以下的方式来宣告并初始一个字符串变量:

String text = "字符串的使用"; 

注意字符串的直接指定必须使用"",而字符串是使用Unicode字符来建构,在建构一个字符串对象变量之后,您可以直接在输出串流中指定变量名称来输出字符串,例如:

System.out.println(text); 

字符串的串接在Java中可以直接使用 + 运算子,+ 本来是加法运算子,而它被重载(Override)为可以直接用于字符串的串接,例如您可以这么使用字符串:

String msg = "哈啰!"; 
msg = msg + "Java Programming!"; 
System.out.println(msg); 

这一段程序代码会在主控台上显示 "哈啰!Java Programming!"。

用于生成字符串对象的String类别拥有几个操作字符串的方法,在这边先介绍几个常用的:

length()

取得字符串的字符长度

equals()

判断原字符串中的字符是否相等于指定字符串中的字符

toLowerCase()

转换字符串中的英文字符为小写

toUpperCase()

转换字符串中的英文字符为大写

下面这个程序介绍以上的几个操作字符串方法的使用与结果:

UseString.java
public class UseString {
	public static void main(String[] args) {
		String text = "hello";
		System.out.println("字符串内容: " + text);
		System.out.println("字符串长度: " + text.length());
		System.out.println("等于hello? " +
		text.equals("hello"));
		System.out.println("转为大写: " +
		text.toUpperCase());
		System.out.println("转为小写: " +
		text.toLowerCase());
	}
}

执行结果:

字符串内容: hello 
字符串长度: 5 
等于hello? true 
转为大写: HELLO 
转为小写: hello

如果您要将输入的字符串转换为整数、浮点数等等数据型态,您可以使用以下各类别所提供的各个静态剖析方法:

Byte.parseByte(字符串)

将字符串剖析为位

Short.parseShort(字符串)

将字符串剖析为short整数

Integer.parseInt(字符串)

将字符串剖析为integer整数

Long.parseLong(字符串)

将字符串剖析为long整数

Float.parseFloat(字符串)

将字符串剖析为float浮点数

Double.parseDouble(字符串)

将字符串剖析为double浮点数



注意如果指定的字符串无法剖析为指定的数据型态数值,则会发生NumberFormatException例外。

之前宣告字符串时,都是以这样的样子来宣告:

String str = "caterpillar"; 

这样的宣告方式看来像是基本数据型态宣告,但事实上String并不是Java的基本数据型态,String是java.lang套件下所提供的类别,如果以配置对象的观念来宣告字符串,应该是这样的:

String str = new String("caterpillar"); 

不过事实上它与下面这段是有差别的:

String str = "caterpillar";

您可以参考 不可变的(immutable)字符串 了解一下差别在哪边。

一个字符串其实是由字符数组所组成,所以使用String类别宣告字符串后,该字符串会具有数组索引的性质,以下介绍几个与索引相关的方法:

char charAt(int index)

传回指定索引处的字符

int indexOf(int ch)

传回指定字符第一个找到的索引位置

int indexOf(String str)

传回指定字符串第一个找到的索引位置

int lastIndexOf(int ch)

传回指定字符最后一个找到的索引位置

String substring(int beginIndex)

取出指定索引处至字符串尾端的子字符串

String substring(int beginIndex, int endIndex)

取出指定索引范围子字符串

char[] toCharArray()

将字符串转换为字符Array



下面这个程序是个简单的示范:

UseString.java
public class UseString {
	public static void main(String[] args) {
		String text = "Your left brain has nothing right.\n"
		+ "Your right brain has nothing left.\n";
		System.out.println("字符串内容: ");
		for(int i = 0; i < text.length(); i++)
		System.out.print(text.charAt(i));
		System.out.println("\n第一个left: " +
		text.indexOf("left"));
		System.out.println("最后一个left: " +
		text.lastIndexOf("left"));
		char[] charArr = text.toCharArray();
		System.out.println("\n字符Array内容: ");
		for(int i = 0; i < charArr.length; i++)
		System.out.print(charArr[i]);
	}
}

执行结果:

字符串内容: 
Your left brain has nothing right. 
Your right brain has nothing left. 

第一个left: 5 
最后一个left: 64 

字符Array内容: 
Your left brain has nothing right. 
Your right brain has nothing left.

在建构字符串对象时,除了直接指定字符串常数之外,您也可以使用字符数组来建构,例如:

char[] name = {'c', 'a', 't', 'e', 'r',
		'p', 'i', 'l', 'l', 'a', 'r'}; 
String str = new String(name); 

上面这个程序片段使用字符数组name,建构出一个内容为"caterpillar"的字符串。

除了以上所介绍的几个方法之外,您应该查查API手册,了解更多有关于String类别的方法,例如我们可以使用endsWith()方法来过滤文件名称,下面这个程序过滤出档案类型为jpg的档案:

UseString.java
public class UseString { 
public static void main(String[] args) { 
String[] filenames = {"caterpillar.jpg", "cater.gif", 
"bush.jpg", "wuwu.jpg", "clockman.gif"};
System.out.print("过滤出jpg档案: "); 
for(int i = 0; i < filenames.length; i++) 
if(filenames[i].endsWith("jpg")) 
System.out.print(filenames[i] + " "); 
System.out.println(""); 
} 
} 


执行结果:

过滤出jpg档案: caterpillar.jpg bush.jpg wuwu.jpg?

Java对于字符串处理的能力算是很强的,您应该多多利用在线手册,了解更多有关于 java.lang.String 的方法使用。