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的值不变
image.png

  1. public class Test{
  2. public static void main(String argv[]){
  3. String x="hello";
  4. myMethod(x);
  5. System.out.println("x="+x);
  6. }
  7. static void myMethod(String k){
  8. k=k+",你好";//注意k引用变化
  9. System.out.println("k="+k);
  10. }
  11. }
  12. /*
  13. 运行结果:
  14. k=hello,你好
  15. x=hello
  16. */

3. 比较两个字符串

int compareTo(String anotherString)
boolean equals(Object anObject)
boolean equalsIgnoreCase(String anotherString)

int compareTo(String anotherString):
当前串大,则返回值>0;
当前串小,则返回值<0;
两串相等,则返回值=0。

  1. public class TestString {
  2. public static void main(String a[]) {
  3. String x="hello1";
  4. String y="hello2";
  5. int result = x.compareTo(y);
  6. System.out.println(result);//-1
  7. }
  8. }

boolean equals(Object anObject)**//重写equals方法,是值比较。**
String s1="Hello!World";
String s2="Hello!World";
boolean b1=s1.equals(s2); true
boolean b2=(s1==s2); true

String s1="Hello!World";
String s2=new String("Hello!World");
boolean b1=s1.equals(s2); true
boolean b2=(s1==s2); false
image.pngimage.png
特别地,intern()方法返回字符串的等同串。如下赋值等价:
s2=s1.intern(); s2=s1;

  1. public class Test{
  2. public static void main(String args[ ]) {
  3. String s1="abc";
  4. String s2="Abc";
  5. //赋值
  6. System.out.println(s1=s2); //Abc
  7. System.out.println(s1==s2); //true
  8. }
  9. }
  10. //例7-1 设有中英文单词对照表,输入中文单词,显示相应英文单词,输入英文单词显示相应中文单词。
  11. public class Word{
  12. public static void main(String args[]) {
  13. String [ ][ ] x={ {"good","好"},{"bad","坏"},{"work","工作"}};
  14. int k;
  15. String in=args[0];
  16. if ( (k=find_e(x,in))!=-1)
  17. System.out.println(x[k][1]);
  18. else if ((k=find_c(x,in))!=-1 )
  19. System.out.println(x[k][0]);
  20. else
  21. System.out.println("无此单词");
  22. }
  23. /* 根据英文找中文,找到则返回所在行位置,未找到则返回-1 */
  24. static int find_e(String [ ][ ] x, String y) {
  25. for ( int k=0;k<x.length;k++)
  26. if (x[k][0].equals(y))
  27. return k;
  28. return -1;
  29. }
  30. /* 根据中文找英文,找到则返回所在行位置,未找到则返回-1 */
  31. static int find_c(String [][] x, String y) {
  32. for ( int k=0;k<x.length;k++)
  33. if (x[k][1].equals(y))
  34. return k;
  35. return -1;
  36. }
  37. }

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):判断参数串是否为当前串的后缀。

  1. public class Test3 {
  2. public static void main(String a[]) {
  3. String s="ABCDEFGHIJK";
  4. System.out.println(s.charAt(3));
  5. System.out.println(s.substring(1,4)); 14-1
  6. System.out.println(s.indexOf("EF"));
  7. }
  8. }
  9. /*
  10. 运行结果:
  11. D
  12. BCD
  13. 4
  14. */
  15. //例7-3 从一个代表带有路径的文件名中分离出文件名。
  16. public class GetFilename {
  17. /* 以下方法获取文件名,文件名是最后一个分隔符\后面的子串 */
  18. public static String pickFile(String fullpath) {
  19. int pos = fullpath.lastIndexOf('\\');
  20. if (pos==-1)
  21. return fullpath;
  22. return fullpath.substring(pos+1);
  23. }
  24. public static void main(String ags[]) {
  25. String filename =pickFile("d:\\java\\example\\test.java");
  26. System.out.println("filename="+ filename);
  27. }
  28. }
  29. 注:\\是一个字符,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” }