大可制作:QQ群:31564239(asp|jsp|php|mysql)

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 的方法使用。