定义字符串:
在 Java 中定义一个字符串最简单的方法是用双引号把它包围起来。
这种用双引号括起来的一串字符实际上都是 String 对象,如字符串"Hello"在编译后即成为 String 对象。
因此也可以通过创建 String 类的实例来定义字符串。
不论使用哪种形式创建字符串,字符串对象一旦被创建,其值是不能改变的,但可以使用其他变量重新赋值的方式进行更改。
直接定义字符串:
String str="Hello Java";
或者:
1 String str; 2 str="Heilo Java";
用 String 类定义
在 Java 中每个双引号定义的字符串都是一个 String 类的对象。因此,可以通过使用 String 类的构造方法来创建字符串,该类位于 java.lang 包中,作用域是 final。
String 类的构造方法有多种重载形式,每种形式都可以定义字符串。下面介绍最常用的几种形式。
1. String()
初始化一个新创建的 String 对象,表示一个空字符序列。
2. String(String original)
初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列。换句话说,新创建的字符串是该参数字符串的副本。例如:
1 String str1=new String("Hello Java"); 2 String str2=new String(str1);
这里 str1 和 str2 的值是相等的。
3. String(char[ ]value)
分配一个新的字符串,将参数中的字符数组元素全部变为字符串。该字符数组的内容已被复制,后续对字符数组的修改不会影响新创建的字符串。例如:
1 char a[]={'H','e','l','l','0'}; 2 String sChar=new String(a); 3 a[1]='s';
上述 sChar 变量的值是字符串"Hello"。 即使在创建字符串之后,对 a 数组中的第 2 个元素进行了修改,但未影响 sChar 的值。
4. String(char[] value,int offset,int count)
分配一个新的 String,它包含来自该字符数组参数一个子数组的字符。offset 参数是子数组第一个字符的索引,count 参数指定子数组的长度。该子数组的内容已被赋值,后续对字符数组的修改不会影响新创建的字符串。例如:
1 char a[]={'H','e','l','l','o'}; 2 String sChar=new String(a,1,4); 3 a[1]='s';
上述 sChar 变量的值是字符串"Hello"。该构造方法使用字符数组中的部分连续元素来创建字符串对象。offset 参数指定起始索引值,count 指定截取元素的个数。创建字符串对象后,即使在后面修改了 a 数组中第 2 个元素的值,对 sChar 的值也没有任何影响。
连接字符串:
使用 concat() 方法
在 Java 中,String 类的 concat() 方法实现了将一个字符串连接到另一个字符串的后面。concat() 方法语法格式如下:
字符串 1.concat(字符串 2);
执行结果是字符串 2 被连接到字符串 1 后面,形成新的字符串。
例 2
如 concat() 方法的语法所示,concat() 方法一次只能连接两个字符串,如果需要连接多个字符串,需要调用多次 concat() 方法。
下面创建一个实例代码来演示如何使用 concat() 方法连接多个字符串。
1 public static void main(String[] args) 2 { 3 String info="三国演义、"; 4 info=info.concat("西游记、"); 5 info=info.concat("水漭传、"); 6 info=info.concat("红楼梦"); 7 System.out.println(info); 8 String cn="中国"; 9 System.out.println(cn.concat("北京").concat("海淀区").concat("人民公园")); 10 }
执行该段代码,输出的结果如下所示。
三国演义、西游记、水浒传、红楼梦
中国北京海淀区人民公园
连接其他类型数据
前面介绍的例子都是字符串与字符串进行连接,其实字符串也可同其他基本数据类型进行连接。如果将字符串同这些数据类型数据进行连接,此时会将这些数据直接转换成字符串。
例 3
编写一个 Java 程序,实现将字符串与整型、浮点型变量相连并输出结果。实现代码如下:
1 public static void main(String[] args) 2 { 3 String book="三国演义"; //字符串 4 int price=59; //整型变量 5 float readtime=2.5f; //浮点型变量 6 System.out.println("我买了一本图书,名字是:"+book+"n价格是:"+price+"n我每天阅读"+readtime+"小时"); 7 }
述代码实现的是将字符串变量 book 与整型变量 price 和浮点型变量 readtime 相连后将结果输出。在这里定义的 price 和 readtime 都不是字符串,当它们与字符串相连时会自动调用自身的 toString() 方法将其转换成字符串形式,然后再参与连接运算。因此,程序运行后的结果如下所示:
我买了一本图书,名字是:三国演义 价格是:59 我每天阅读2.5小时
假设将本例中的输出语句修改为如下形式:
1 System.out.println("我买了一本图书,名字是:"+book+"n 价格是:"+price+"n我每天阅读"+(price+readtime)+"小时");
因为运算符具有优先级,而圆括号的优先级最高,所以先计算 price 与 readtime 的和,再将结果转换成字符串进行连接。此时的运行结果如下所示:
我买了一本图书,名字是:三国演义 价格是:59 我每天阅读61.5小时
获取字符串长度(length())
在 Java 中,要获取字符串的长度,可以使用 String 类的 length() 方法,其语法形式如下:
字符串名.length();
例 1
在学生信息管理系统中对管理员密码有这样的规定,即密码长度必须大于 6 位且小于 12 位。因为密码太短容易被破解,太长的话又不容易记住。这就需要首先获取用户输入的密码字符串,然后调用 length() 方法获取长度,再做进一 步的长度判断,最终实现代码如下所示:
1 public static void main(String[] args) 2 { 3 String sys="学生信息管理";//字义一个字符串表示系统名称 4 System.out.println("欢迎进入《"+sys+"》系统");//输出系统名称 5 System.out.println("请设置一个管理员密码:"); 6 Scanner input=new Scanner(System.in); 7 String pass=input.next();//获取用户输入的密码 8 int length=pass.length();//获取密码的长度 9 if(length>6&&length<12) 10 { 11 System.out.println("密码长度符合规定。"); 12 System.out.println("已生效,请牢记密码:"+pass); 13 } 14 else if(length>=12) 15 System.out.println("密码过长。"); 16 else 17 System.out.println("密码过短。"); 18 }
上述代码将用户输入的密码保存到字符串变量 pass 中,再调用 pass.length() 方法将长度保存到 length 变量,然后使用 if 语句根据长度给出提示。
运行程序,当输入的密码过短时,运行结果如下所示:
欢迎进入《学生信息管理》系统 请设置一个管理员密码: 123456 密码过短。
当输入的密码符合规定时,运行结果如下所示:
欢迎进入《学生信息管理》系统
请设置一个管理员密码:
abc12345678
密码长度符合规定。
已生效,请牢记密码:abc12345678
转换大小写(toLowerCase()和toUpperCase())
String 类的 toLowerCase() 方法可以将字符串中的所有字符全部转换成小写,而非字母的字符不受影响。语法格式如下:
字符串名.toLowerCase() //将字符串中的字母全部转换为小写,非字母不受影响
toUpperCase() 则将字符串中的所有字符全部转换成大写,而非字母的字符不受影响。语法格式如下:
字符串名.toUpperCase() //将字符串中的字母全部转换为大写,非字母不受影响
例如:
1 String str="abcdef 我 ghijklmn"; 2 System.out.println(str.toLowerCase()); //输出:abcdef 我 ghijklmn 3 System.out.println(str.toUpperCase()); //输出:ABCDEF 我 GHIJKLMN
例 1
下面的实例代码演示了如何对字符串应用大写和小写转换。
1 public static void main(String[] args) 2 { 3 String en="The Day You Went Away"; //定义原始字符串 4 System.out.println("原始字符串:"+en); 5 System.out.println("使用 toLowerCase() 方法之后为:"+en.toLowerCase()); 6 System.out.println("使用 toUpperCase() 方法之后为:"+en.toUpperCase()); 7 8 en="sun sun 是太阳,圆圆挂在 SKY 上"; //定义原始字符串 9 System.out.println("原始字符串:"+en); 10 System.out.println("使用 toLowerCase() 方法之后为:"+en.toLowerCase()); 11 System.out.printIn("使用 toUpperCase() 方法之后为:"+en.toUpperCase()); 12 13 en="select id,name,sex,address,birthday from students"; 14 System.out.println("原始字符串:"+en); //定义原始字符串 15 System.out.println("使用 toLowerCase() 方法之后为:"+en.toLowerCase()); 16 System.out.println("使用 toUpperCase() 方法之后为:"+en.toUpperCase()); 17 }
代码比较简单,运行后的输出结果如下:
原始字符串:The Day You Went Away
使用 toLowerCase() 方法之后为:the day you went away
使用 toUpperCase() 方法之后为:THE DAY YOU WENT AWAY
原始字符串:sun sun 是太阳,圆圆挂在 SKY 上
使用 toLowerCase() 方法之后为:sun sun 是太阳,圆圆挂在 sky 上
使用 toUpperCase() 方法之后为:SUN SUN 是太阳,圆圆挂在 SKY 上
原始字符串:select id,name,sex,address,birthday from students
使用 toLowerCase() 方法之后为:select id,name,sex,address,birthday from students
使用 toUpperCase() 方法之后为:SELECT ID,NAME,SEX,ADDRESS,BIRTHDAY FROM STUDENTS
去除空格(trim())
字符串中存在的首尾空格一般情况下都没有任何意义,如字符串" Hello",但是这些空格会影响到字符串的操作,如连接字符串或比较字符串等,所以应该去掉字符串中的首尾空格,这需要使用 String 类提供的 trim() 方法。
trim() 方法的语法形式如下:
字符串名.trim()
使用 trim() 方法的示例如下:
1 String str=" hello "; 2 System.out.println(str.length()); //输出 9 3 System.out.println(str.trim().length()); //输出 5
提取子字符串(substring())
String 类的 substring() 方法用于对字符串进行提取,该方法主要有两种重载形式,下面分别介绍。
1. substring(int beginIndex) 形式
此方式用于提取从索引位置开始至结尾处的字符串部分。调用时,括号中是需要提取字符串的开始位置,方法的返回值是提取的字符串。例如:
1 String str="我爱 Java 编程"; 2 String result=str.substring(3); 3 System.out.println(result); //输出:Java 编程
2. substring(int beginIndex,int endIndex) 形式
此方法中的 beginIndex 表示截取的起始索引,截取的字符串中包括起始索引对应的字符;endIndex 表示结束索引,截取的字符串中不包括结束索引对应的字符,如果不指定 endIndex,则表示截取到目标字符串末尾。该方法用于提取位置 beginIndex 和位置 endIndex 位置之间的字符串部分。
这里需要特别注意的是, 对于开始位置 beginIndex, Java 是基于字符串的首字符索引为 0 处理的,但是对于结束位置 endIndex,Java 是基于字符串的首字符索引为 1 来处理的,如图 1 所示。
注意:substring() 方法是按字符截取,而不是按字节截取。
例 1
创建一个字符串,对它使用 substring() 方法进行截取并输出结果。示例代码如下:
1 public static void main(String[] args) 2 { 3 String day="Today is Monday"; //原始字符串 4 System.out.println("substring(0)结果:"+day.substring(0)); 5 System.out.println("substring(2)结果:"+day.substring(2)); 6 System.out.println("substring(10)结果:"+day.substring(10)); 7 System.out.println("substring(2,10)结果:"+day.substring(2,10)); 8 System.out.println("substring(0,5)结果:"+day.substring(0,5)); 9 }
输出结果如下所示:
substring(0)结果:Today is Monday substring(2)结果:day is Monday substring(10)结果:onday substring(2,10)结果:day is M substring(0,5)结果:Today
分割字符串(spilt())
String 类的 split() 方法可以按指定的分割符对目标字符串进行分割,分割后的内容存放在字符串数组中。该方法主要有如下两种重载形式:
str.split(String sign) str.split(String sign,int limit)
其中,str 为需要分割的目标字符串;sign 为指定的分割符,可以是任意字符串;limit 表示分割后生成的字符串的限制个数,如果不指定,则表示不限制,直到将整个目标字符串完全分割为止。
例 1
使用 split() 方法对字符串进行分割的实例如下:
1 public static void main(String[] args) 2 { 3 String Colors="Red,Black,White,Yellow,Blue"; 4 String[] arr1=Colors.split(","); //不限制元素个数 5 String[] arr2=Colors.split(",",3); //限制元素个数为3 6 System.out.println("所有颜色为:"); 7 for(int i=0;i<arr1.length;i++) 8 { 9 System.out.println(arr1[i]); 10 } 11 System.out.println("前三个颜色为:"); 12 for(int j=0;j<arr2.length;j++) 13 { 14 System.out.println(arr2[j]); 15 } 16 }
输出结果如下:
所有颜色为:
Red
Black
White
Yellow Blue
前三个颜色为:
Red
Black
White,Yellow,Blue
截取新闻标题
下面编写 Java 代码,实现使用字符串的 substring() 方法来截取新闻标题并以列表的形式显示的功能。代码如下:
1 public class Test09 2 { 3 public static void main(String[] args) 4 { 5 String[] news=new String[] 6 { 7 "如何快速掌握Java", 8 "听老王剖析Java中的运算符", 9 "学习Java的十大忠告", 10 "你所不知道的java网络编程技巧大全", 11 "Java面试题大全", 12 }; //定义存储新闻标题的数组 13 String title="************* 新闻列表 *************"; 14 System.out.println(title.substring(10,30)); 15 System.out.println("----------------------------------------------"); 16 /* 17 *循环遍历数组截取数组元素中的前10个字符作为列表展示 18 */ 19 for(int i=0;i<news.iength;i++) 20 { 21 //判断数组元素的长度是否大于10,如果大于,则截取,否则全部显示 22 if(news[i].length()>10) 23 { 24 System.out.println(news[i].substring{0,10)+"…"; 25 } 26 else 27 { 28 System.out.println(news[i]); 29 } 30 } 31 } 32 }
运行该程序,输出的结果如下所示。
************* 新闻列表 *************
如何快速掌握Java
听老王剖析java中…
学习Java的十大忠…
你所不知道的java…
Java面试题大全
字符串的替换(replace()、replaceFirst()和replaceAll())
在 Java 中,String 类提供了 3 种字符串替换方法,分别是 replace()、replaceFirst() 和 replaceAll(),本文将详细介绍它们的使用方法。
replace() 方法
replace() 方法用于将目标字符串中的指定字符(串)替换成新的字符(串),其语法格式如下:
字符串.replace(String oldChar, String newChar)
其中,oldChar 表示被替换的字符串;newChar 表示用于替换的字符串。replace() 方法会将字符串中所有 oldChar 替换成 newChar。
例 1
创建一个字符串,对它使用 replace() 方法进行字符串替换并输出结果。代码如下: