本章工作任务
实现注册信息的有效性验证
格式化显示商品金额
本章技能目标
掌握String的基本用法
会使用==和equals()比较字符串
会使用StringBuffer类的方法对字符串进行操作
本章简介
在前面章节中,大家学习了如何定义和调用方法,以及带参方法的使用。在本章中,我们来学习字符串。字符串被广泛地用在Java程序设计中,很多操作都要使用字符串来完成。例如,系统中存储的密码、频繁使用的电子邮箱、登录系统或BBS的用户名等,都要使用字符串来存储。那么对字符串的处理当然也是必不可少的。因此,在学习的过程中一定要重视它。字符串运用得好坏足以影响程序的运行效率,了解处理字符串的常用方法,可以省去不少程序编写与维护的工夫。下面就来学习处理字符串的方法。
技术内容
15.1 字符串概述
在现实生活中,大家一定注册过电子邮箱,用户名和密码等使用的就是字符串。字符串是一系列字符组成的序列。其实,从进入Java编程世界的第一天起,大家就已经在使用字符串了,如程序从控制台输出字符串"欢迎进入"、"教育改变生活"等,可以说字符串无处不在。
15.1.1如何使用字符串
简单地说,使用字符串主要分为两步。
(1) 定义并初始化字符串。
(2) 使用字符串,对字符串进行一些处理。
前面已经学过如何创建一个字符串,如下所示。
语法:
//创建一个字符串对象” Hello World" String s = n Hello World";
在Java中,字符串被作为String类型的对象来处理。String类是Java设计人员预先提供的一个非常有用的类,它位于java, lang包中,默认情况下,该包被自动导入所有的程序。创建String对象的另外两种方法如下列代码所示。
//创建一个空字符串 String s = new String ();
或者
//创建一个字符串对象” Hello World" String s = new String("Hello World");
正因如此,大家可以通过使用String类提供的方法来完成对字符串的操作。String类提供了许多有用的方法,如获得字符串的长度、对两个字符串进行比较、连接两个字符串及提取一个字符串中的某一部分等。下面我们就来领略一下它的强大之处。
15.1.2字符串的长度
问题:注册新用户,要求密码长度不能小于6位。
分析:学习了 Scanner类之后,在控制台接收一个从键盘上输入的字符串已经不再是一件难事。那么,如何计算字符串的长度呢? String类提供了 length()方法。字符串是一串字符序列,String类的length()方法用来确定字符串的长度,即字符串中的字符数目。调用length()方法返回的结果就是字符串中的字符数,如图15.1所示。
图15.1获得字符串的长度
调用length()方法的语法如下。
字符串 1. length ();
返回字符串1的长度。
示例1
package cn.jbit.classandobject; import java.util.*; public class Register { /* * 注册密码长度不少于6位 */ public static void main(String[] args) { Scanner input = new Scanner(System.in); String uname,pwd; System.out.print("请输入用户名: "); uname=input.next(); System.out.print("请输入密码: "); pwd=input.next(); if(pwd.length()>=6){ System.out.print("注册成功! "); }else{ System.out.print("密码长度不能小于6位!"); } } }
运行示例1,运行结果如图15.2所示。
在示例1中,使用字符串对象pwd的length()方法 "pwd.length()" 获得密码字符串的长度。由于 "1234567" 的长度为7,因此符合 ">=6" 的要求,打印输出 "注册成功"。
图15.2示例1的运行结果
15.1.3字符串的比较
在生活中,经常会对字符串进行比较。登录计算机操作系统时,输入的密码会和系统中已保存的密码进行比较;去书店买书时,看到的书名会和你大脑中想买的书名进行比较;考试结束去查成绩时,无意中也在将看到的名字和自己的名字进行比较,最终找到自己的成绩。可见,字符串的比较遍布我们的生活。接下来学习如何使用计算机进行字符串的比较。
问题:注册成功后,实现登录验证。用户名为 ”wangfeng” , 密码为 “1234567”。
分析:要编写程序让计算机比较两个字符串对象的内容是否一致,在前面章节的学习中已经接触过了,使用equals()方法可以帮助大家解决这个问题。下面一起来回顾一下,分析它的工作原理,如图15.3所示。
在使用equals()方法比较两个字符串时,它逐个对照组成两个字符串的每个字符是否相同。如果都相同,则返回true ; 否则返回false。对于字符的大小写,也在检查范围之内,语法如下。
语法:
字符串1. equals (字符串2);
比较两个字符串的值是否相同,返回boolean类型的值。如果相同,则返回true;否则返回false。
示例2
package cn.jbit.classandobject; import java.util.*; public class Login { /* * 登录 */ public static void main(String[] args) { Scanner input = new Scanner(System.in); String uname,pwd; System.out.print("请输入用户名: "); uname=input.next(); System.out.print("请输入密码: "); pwd=input.next(); if(uname.equals("wangfeng")&&pwd.equals("1234567")){ System.out.print("登录成功! "); }else{ System.out.print("用户名或密码不匹配,登录失败!"); } } }
运行示例2,运行结果如图15.4所示。
图15.4示例2的运行结果
uname.equals("wangfeng")和pwd.equals("1234567") 分别比较输入的值是否符合要求。如果符合,则返回true,打印输出 "登录成功"。
可能大家会有疑问,为什么不能使用双等号(==)来判断两个字符串是否相同呢?在Java中,双等号(==)和equals()方法虽都应用于两个字符串,但所判断的内容是有差别的。简单地讲,"=="判断的是两个字符串对象在内存中的首地址是否相等,即判断是否是同一个字符串对象,而equals()判断的是两个字符串对象的值是否相等。了解了这一点,就不难理解示例3的运行结果了。
示例3
package cn.jbit.classandobject; public class Difference { public static void main(String[] args){ String str1 = new String("我爱我的祖国"); String str2 = new String("我爱我的祖国"); if (str1.equals(str2)){ System.out.println("两个字符串值相同。"); }else{ System.out.println("两个字符串值不相同。"); } if (str1==str2){ System.out.println("两个字符串相同。"); }else { System.out.println("两个字符串不相同。"); } } }
运行示例3,运行结果如图15.5所示。
图15.5示例3的运行结果
在使用equals()方法比较两个字符串时,对于字符的大小写,也在检查范围之内。但有时我们会碰到忽略大小写的验证,如"Java"和"java"都是指Java这门课程,使用equals()方法比较会认为它们不是一门课,因此,需要使用另一种方法——equalslgnoreCase()方法。Ignore是"忽略"的意思,这种方法在比较字符串时会忽略字符的大小写,语法如下。
语法:
字符串 1. equalsIgnoreCase ( 字符串 2);
忽略大小写比较字符串1和字符串2。如果都相同,则返回true;否则返回false。
问题:系统规定,登录时不考虑用户名的大小写问题,该如何实现登录?
分析:修改示例2,使用equalsIgnoreCase()方法即可实现。