String类主要用于对字符串内容的检索、比较等操作,操作的结果通常得到一个新字符串,但不会改变源串的内容 。
1. 创建字符串
public String()
public String(String s)
public String(StringBuffer buf)
public String(char value[ ])
举例:
String s = new String(“ABC”);
String s = “ABC”;
char[ ] helloArray = { ‘h’, ‘e’, ‘l’, ‘l’, ‘o’ };
String helloString = new String(helloArray);
char[] ch=s.toCharArray(); //字符串转换为字符数组
求字符串长度 length()
String s = “Hello!” ;
System.out.println(s.length());
2.字符串的连接
利用“+”运算符可以实现字符串的拼接;可以将字符串与任何一个对象或基本数据类型的数据进行拼接。
例如:
String s= “Hello!”;
s=s+ “ Mary “+4; //s的结果为Hello! Mary 4
Java还提供了另一个方法concat(String str)专用于字符串的连接。
String s=”4+3=”;
String s1=s.concat(“7”); //方法结果为4+3=7,但s的值不变
public class Test{
public static void main(String argv[]){
String x="hello";
myMethod(x);
System.out.println("x="+x);
}
static void myMethod(String k){
k=k+",你好";//注意k引用变化
System.out.println("k="+k);
}
}
/*
运行结果:
k=hello,你好
x=hello
*/
3. 比较两个字符串
int compareTo(String anotherString)
boolean equals(Object anObject)
boolean equalsIgnoreCase(String anotherString)
int compareTo(String anotherString):
当前串大,则返回值>0;
当前串小,则返回值<0;
两串相等,则返回值=0。
public class TestString {
public static void main(String a[]) {
String x="hello1";
String y="hello2";
int result = x.compareTo(y);
System.out.println(result);//-1
}
}
boolean equals(Object anObject)**//重写equals方法,是值比较。**
String s1="Hello!World";
String s2="Hello!World";
boolean b1=s1.equals(s2);
trueboolean b2=(s1==s2);
true
String s1="Hello!World";
String s2=new String("Hello!World");
boolean b1=s1.equals(s2);
trueboolean b2=(s1==s2);
false
特别地,intern()方法返回字符串的等同串。如下赋值等价: s2=s1.intern(); s2=s1;
public class Test{
public static void main(String args[ ]) {
String s1="abc";
String s2="Abc";
//赋值
System.out.println(s1=s2); //Abc
System.out.println(s1==s2); //true
}
}
//例7-1 设有中英文单词对照表,输入中文单词,显示相应英文单词,输入英文单词显示相应中文单词。
public class Word{
public static void main(String args[]) {
String [ ][ ] x={ {"good","好"},{"bad","坏"},{"work","工作"}};
int k;
String in=args[0];
if ( (k=find_e(x,in))!=-1)
System.out.println(x[k][1]);
else if ((k=find_c(x,in))!=-1 )
System.out.println(x[k][0]);
else
System.out.println("无此单词");
}
/* 根据英文找中文,找到则返回所在行位置,未找到则返回-1 */
static int find_e(String [ ][ ] x, String y) {
for ( int k=0;k<x.length;k++)
if (x[k][0].equals(y))
return k;
return -1;
}
/* 根据中文找英文,找到则返回所在行位置,未找到则返回-1 */
static int find_c(String [][] x, String y) {
for ( int k=0;k<x.length;k++)
if (x[k][1].equals(y))
return k;
return -1;
}
}
4.字符串的提取与替换
char **charAt**(int index)
:返回指定位置的字符。(第1个位置为0)String **substring**(int beginIndex, int endIndex)
:返回从beginIndex位置开始到endIndex-1结束的子字符串。String **substring**(int beginIndex)
:返回从beginIndex位置开始到串末尾的子字符串。String **replace**(char oldchar,char newchar)
:将字符串中所有oldchar字符换为newchar。String **replaceAll**(String regex,String replacement)
:将字符串中所有与正则式regex匹配的子串用新的串replacement替换。String **trim**()
:将当前字符串去除前导空格和尾部空格后的结果作为返回的串。String **toUpperCase**()
: 所有字符转大写。String **toLowerCase**()
: 所有字符转小写。
5.字符串中字符或子串的查找
方法 | 功能(返回参数在串中的位置) |
---|---|
indexOf(int ch) | ch的首次出现位置,找不到则返回-1 |
indexOf(int ch, int start) | ch的首次出现位置≥start |
indexOf(String str) | str的首次出现位置 |
indexOf(String str, int start) | str的首次出现位置≥start |
lastIndexOf(int ch) | ch的最后出现位置 |
lastIndexOf(int ch, int start) | ch的最后出现位置≤start |
lastIndexOf(String str) | str的最后出现位置 |
lastIndexOf(String str, int start) | str的最后出现位置≤start |
另外,还有两个方法可用来判断参数串是否为字符串的特殊子串。
(1)boolean startsWith(String prefix):判断参数串是否为当前串的前缀。
String s=”hello,world”;
boolean x=s.startsWith(“he”);
(2)boolean endsWith(String postfix):判断参数串是否为当前串的后缀。
public class Test3 {
public static void main(String a[]) {
String s="ABCDEFGHIJK";
System.out.println(s.charAt(3));
System.out.println(s.substring(1,4)); 1到4-1
System.out.println(s.indexOf("EF"));
}
}
/*
运行结果:
D
BCD
4
*/
//例7-3 从一个代表带有路径的文件名中分离出文件名。
public class GetFilename {
/* 以下方法获取文件名,文件名是最后一个分隔符\后面的子串 */
public static String pickFile(String fullpath) {
int pos = fullpath.lastIndexOf('\\');
if (pos==-1)
return fullpath;
return fullpath.substring(pos+1);
}
public static void main(String ags[]) {
String filename =pickFile("d:\\java\\example\\test.java");
System.out.println("filename="+ filename);
}
}
注:\\是一个字符,pos=15
split用来根据指定分隔符分离字符串
格式:public String[] split(String regex)
例如:对于字符串str=”boo:and:foo:bye”
str.split(“ : “)的结果为:
{ “boo”, “and”, “foo” , “bye” }
str.split(“ o “)的结果为:
{ “b”, “”, “:and:f” , “”, “:bye” }
注意,参数串代表一个正则表达式的匹配模式,分隔符如果是+、*等符号时,要进行转义处理,例如分隔符为“+”,要写成”\+”的正则式。
String x= “1+2+4+5+8”;
x.split(“ \+ “)的结果为{“ 1 “, “ 2 “, “ 4 “, “ 5 “, “ 8” }