##################################################
目录
通过 toLowerCase() 方法转换字符串的大小写来达到忽略大小写比较的效果
##################################################
简单的字符串处理
——————————
字符串是一门学问
字符串被广泛地用在 Java 程序设计中 很多操作都需要使用字符串来完成
例如 用户名、密码、电子邮箱、登陆 等都需要使用字符串来完成
毫不夸张的说 字符串运用的好坏足以影响程序的运行效率
当我们学会字符串 可以省去很多程序编写与维护的工夫
一定要重视她 话说 字符串很好玩的!
字符串是一门学问。
其实 从进入 Java 的世界第一天起 就已经在使用字符串了 那就是程序从控制台输出字符串 没错就是输出!
可以说 在 Java 程序中 字符串无处不在
例如 我们注册电子邮箱什么的 用户名和密码什么的不就是字符串吗?!!
——————————
String 字符串
在 Java 中 字符串是被看作 String 类的类型的对象来进行处理的!
没错 int、double、char 都是普通的数据类型
而 String 是一个对象!
字符串对象的类型就是 String 类型
好比一个数字的类型是 int 整型
还记得吗 类是对象的类型 对象是类的实例
String 是 Java 设计人员预先提供的一个非常有用的类 位于这个包内:
java.lang
java.lang 这个包默认被自动导入所有的程序!
——————————
定义并初始化字符串
怎么创建一个字符串呢?
创建一个空字符串:
String str = new String(); /* String 变量名 = new String(); */
String st; /* String 变量名; */
创建一个字符串变量:
String str = "Hello,World!"; /* String 变量名 = 值; */
创建一个字符串对象:
String str = new String ( "Hello,World!" ); /* String 变量名 = new String(值); */
——————————
String 类常用的三个方法
我们可以通过 String类 提供的方法来完成对字符串的各种操作
String类 提供了许多有用的方法 例如
获得字符串的长度
对两个字符串进行比较
连接两个字符串及提取一个字符串中的某一部分
等等
——————————
length() 获取字符串的长度
%%%%%
当我们学习了 Scanner 类之后可以在控制台上接收一个从键盘输入的字符串
那么如何计算字符串的长度呢? String 类 提供了 length() 方法!
字符串实际上是一串字符序列
length() 方法用来确定字符串的长度 即 字符串 中的 字符数目 这个方法返回字符串中的字符数
%%%%%
调用 length() 方式:
字符串.length()
%%%%%
示例设置 WIFI 要求密码长度不小于 8 位:
/* CentOS 7 Demo:
[lilian@CentOS javaTest]$ javac Main.java
[lilian@CentOS javaTest]$ java Main
请输入 SSID <<< cn
请输入 Passwd <<< 1008611
>>> 密码长度不能小于 8 位!
[lilian@CentOS javaTest]$ java Main
请输入 SSID <<< cn
请输入 Passwd <<< 12345678
>>> 设置成功.. 新密码为 12345678
[lilian@CentOS javaTest]$
*/
public class Main {
public static void main(String[] args) {
/* 如果不导包请指定该类所在的包的路径 */
java.util.Scanner sc = new java.util.Scanner(System.in);
String WIFI, pwd; /* WIFI 名, WIFI 密码 */
System.out.print ( "请输入 SSID <<< ");
WIFI = sc.next();
System.out.print ( "请输入 Passwd <<< ");
pwd = sc.next();
if ( pwd.length() >= 8 )
/* 条件表达式中获取长度并且判断 */
System.out.println ( ">>> 设置成功.. 新密码为 " + pwd );
else
System.out.println ( ">>> 密码长度不能小于 8 位!" );
}
}
——————————
equals() 将两个字符串进行比较
%%%%%
我们经常对字符串进行比较
登陆计算机时 输入的密码会对系统中保存的密码进行比较
去买东西时 买的东西名字会和你脑子中的东西名字进行比较
字符串的比较 遍布我们的生活
要编写程序让计算机比较两个字符串对象的内容是否一致 我们也接触过了要用 equals() 方法
equals() 方法比较两个字符串时 会逐个对照组成两个字符串的每个字符是否相同
返回 boolean 值 如果都相同 返回 真/true 如果不相同 返回 假/false
当然 对字符的大小写也是包含在检查之内的!!!
%%%%%
语法如下:
字符串.equals(字符串)
%%%%%
需求:
注册用户名
注册成功后登陆验证
code && demo :
/* CentOS 7 Demo:
[lilian@CentOS javaTest]$ javac Main.java
[lilian@CentOS javaTest]$ java Main
#注册信息
请输入用户名 <<< first
请输入用户密码 <<< 1234567890
> 注册成功!
#登陆账户
请输入用户名 <<< second
请输入密码 <<< 1234567890
>>> 用户名密码不匹配..登录失败!
#登陆账户
请输入用户名 <<< first
请输入密码 <<< 12345678910
>>> 用户名密码不匹配..登录失败!
#登陆账户
请输入用户名 <<< first
请输入密码 <<< 1234567890
>>> 欢迎您 【1234567890】
[lilian@CentOS javaTest]$
*/
class Handle {
/* 处理类 */
public String record[] = new String[2]; /* 公开的成员属性 记录的字符串数组 记录两个字符串 */
public String register(String user, String pass) {
/* 注册方法 接收两个参数 用户名和用户密码 返回一个成功 String 信息 */
record[0] = user;
record[1] = pass;
return "> 注册成功!";
}
public boolean signIn(String user, String pass) {
/* 验证用户信息 接收两个信息 用户名和用户密码 返回真假 */
if ( user.equals(record[0]) && pass.equals(record[1]) )
/* 如果用户名和用户密码都跟存储的用户名和用户密码一样就返回成功值 */
return true;
/* 默认返回失败值 */
return false;
}
}
public class Main {
/* 主要类 */
public static void main(String[] args) {
java.util.Scanner sc = new java.util.Scanner(System.in);
Handle ha = new Handle(); /* 实例化处理类的处理对象 */
String use, pwd; /* 临时接收用户名和用户密码 */
System.out.println ( "#注册信息" );
System.out.print ( "请输入用户名 <<< " );
use = sc.next();
System.out.print ( "请输入用户密码 <<< " );
pwd = sc.next();
System.out.println( ha.register ( use, pwd ) ); /* 将用户名和用户密码存入数组并输出返回信息 */
for ( int i = 1; i <= 3; i ++ ) {
System.out.println ( "\n#登陆账户" );
System.out.print ( "请输入用户名 <<< " );
use = sc.next();
System.out.print ( "请输入密码 <<< " );
pwd = sc.next();
if ( ha.signIn( use, pwd ) )
System.out.println ( ">>> 欢迎您 【" + ha.record[1] + "】" );
else
System.out.println ( ">>> 用户名密码不匹配..登录失败!" );
}
}
}
%%%%%
为什么不能使用双等号
==
来判断两个字符串是否相同呢?
Java 中虽然 双等号 和 equals() 虽然都应用与两个字符串
但是所判断的内容是有差别的!
这么说吧 双等号判断的是两个字符串对象在内存中的首地址是否相等
即判断是否是同一个字符串对象 而 equals() 判断的是两个字符串对象的值是否相等
我们可以通过下面这段代码看出来:
/* CentOS 7 Demo:
[lilian@CentOS javaTest]$ javac Main.java
[lilian@CentOS javaTest]$ java Main
两个字符串相同.. 略略略 略略略
两个字符串不相同.. 略略略 略略略
两个字符串不相同.. 略略略 嘻嘻嘻
两个字符串不相同.. 略略略 嘻嘻嘻
[lilian@CentOS javaTest]$
*/
public class Main {
public static void main(String[] args) {
String str_1 = new String ( "略略略" );
String str_2 = new String ( "略略略" );
if ( str_1.equals ( str_2 ) )
System.out.println ( "两个字符串相同..\t" + str_1 + " " + str_2 );
else
System.out.println ( "两个字符串不相同..\t" + str_1 + " " + str_2 );
if ( str_1 == str_2 )
System.out.println ( "两个字符串相同..\t" + str_1 + " " + str_2 );
else
System.out.println ( "两个字符串不相同..\t" + str_1 +" " + str_2 );
str_2 = new String ( "嘻嘻嘻" ); /* 更改 str_2 的值 */
if ( str_1.equals ( str_2 ) )
System.out.println ( "两个字符串相同..\t" + str_1 + " " + str_2 );
else
System.out.println ( "两个字符串不相同..\t" + str_1 + " " + str_2 );
if ( str_1 == str_2 )
System.out.println ( "两个字符串相同..\t" + str_1 + " " + str_2 );
else
System.out.println ( "两个字符串不相同..\t" + str_1 + " " + str_2 );
}
}
——————————
equalsIgnoreCase() 忽略字符串的大小写
%%%%%
在使用 equals() 比较两个字符串的时候 对于字符的大小写 也在检查范围之内
我们有时候会碰到忽略大小写的验证
例如
Java
和
java
使用 equals() 比较两个字符串的话 会被认为两个不同的字符串
所以我们需要使用 equalsIgnoreCase() 这个方法(我丢好长!!。。)
Ignore 是 忽略 的意思
使用 equalsIgoreCase() 在比较字符串的时候会忽略大小写
然后 相同则返回 真/true 不相同则返回 假/false
%%%%%
语法格式:
字符串.equalsIgoreCase(字符串)
%%%%%
需求:
登陆时忽略大小写比较验证
示例:
/* CentOS 7 Demo:
[lilian@CentOS javaTest]$ javac Main.java
[lilian@CentOS javaTest]$ java Main
#注册信息
请输入用户名 <<< first
请输入密码 <<< 123456
>>> 注册成功!
#登陆账户 检查大小写
请输入用户名 <<< First
请输入密码 <<< 123456
>>> 用户名密码不匹配..登录失败!
#登陆账户 忽略大小写
请输入用户名 <<< First
请输入密码 <<< 123456
>>> 欢迎您 【first】
[lilian@CentOS javaTest]$
*/
class Main {
public static void main(String[] args) {
java.util.Scanner sc = new java.util.Scanner(System.in);
Handle ha = new Handle();
String use, pwd;
System.out.println ( "#注册信息" );
System.out.print ( "请输入用户名 <<< " );
use = sc.next();
System.out.print ( "请输入密码 <<< " );
pwd = sc.next();
System.out.println ( ha.register ( use, pwd ) ); /* 将用户密码一起存储并返回结果信息 */
for ( int i = 1; i <= 2; i ++ ) {
System.out.print ( "\n#登陆账户" );
if (i == 1)
System.out.println ( "\t检查大小写" );
if (i == 2)
System.out.println ( "\t忽略大小写" );
System.out.print ( "请输入用户名 <<< " );
use = sc.next();
System.out.print ( "请输入密码 <<< " );
pwd = sc.next();
if (i == 1) {
/* 检查大小写的话执行 continue 跳转到下一次循环 本次循环体之后的代码不会执行 */
if ( ha.signIn_equals ( use, pwd ) )
System.out.println ( ">>> 欢迎您 【" + ha.record[0] + "】" );
else
System.out.println ( ">>> 用户名密码不匹配..登录失败!" );
continue;
}
/* 不检查大小写外面不需要进行判断 因为检查大小写就不会执行到这里! */
if ( ha.signIn_equalsIgnoreCase ( use, pwd ) )
System.out.println ( ">>> 欢迎您 【" + ha.record[0] + "】" );
else
System.out.println ( ">>> 用户名密码不匹配..登录失败!");
}
}
}
class Handle {
public String record[] = new String[2];
public String register ( String user, String pass ) {
record[0] = user;
record[1] = pass;
return ">>> 注册成功!";
}
public boolean signIn_equals ( String user, String pass ) {
if ( user.equals( record[0] ) && pass.equals( record[1] ) )
/* 检查大小写 */
return true;
return false;
}
public boolean signIn_equalsIgnoreCase ( String user, String pass ) {
if ( user.equalsIgnoreCase( record[0] ) && pass.equalsIgnoreCase( record[1] ) )
/* 忽略大小写 */
return true;
return false;
}
}
——————————
通过 toLowerCase() 方法转换字符串的大小写来达到忽略大小写比较的效果
%%%%%
有没有想过这种情况
如果在比较之前就变成全部 大写/小写 然后再使用 equals() 比较
是否也会得到同样的效果呢?
%%%%%
在 Java 中 String 类提供了两个方法改变字符串中字符的大小写
转换字符串中的英文字母为小写用 toLowerCase() 方法:
字符串.toLowerCase() /* 转换为小写 */
转换字符串中的英文字母为大写用 toUpperCase() 方法:
字符串.tuUpperCase() /* 转换为大写 */
%%%%%
需求:
登录时 忽略/转换 大小写验证
示例:
/* CentOS 7 Demo:
[lilian@CentOS javaTest]$ javac Main.java
[lilian@CentOS javaTest]$ java Main
#注册信息
请输入用户名 <<< FiRsT
请输入密码 <<< 123456
>>> 注册成功!
#登陆账户 转换小写
请输入用户名 <<< first
请输入密码 <<< 123456
>>> 欢迎您 【FiRsT】
#登陆账户 转换大写
请输入用户名 <<< first
请输入密码 <<< 123456
>>> 欢迎您 【FiRsT】
[lilian@CentOS javaTest]$
*/
class Main {
public static void main(String[] args) {
java.util.Scanner sc = new java.util.Scanner(System.in);
Handle ha = new Handle();
String use, pwd;
System.out.println ( "#注册信息" );
System.out.print ( "请输入用户名 <<< " );
use = sc.next();
System.out.print("请输入密码 <<< ");
pwd = sc.next();
System.out.println ( ha.register ( use, pwd ) );
for ( int i = 1; i <= 2; i ++ ) {
System.out.print ( "\n#登陆账户" );
if (i == 1)
System.out.println ( "\t转换小写" );
if (i == 2)
System.out.println ( "\t转换大写" );
System.out.print ( "请输入用户名 <<< " );
use = sc.next();
System.out.print ( "请输入密码 <<< " );
pwd = sc.next();
if (i == 1) {
/* 调用转小写 */
if ( ha.signIn_toLower ( use, pwd ) )
System.out.printf ( ">>> 欢迎您 【%s】\n", ha.record[0] );
else
System.out.println ( ">>> 用户名密码不匹配 登录失败" );
continue;
}
if ( ha.signIn_toUpper ( use, pwd ) )
/* 调用转大写 */
System.out.printf ( ">>> 欢迎您 【%s】\n", ha.record[0] );
else
System.out.println ( ">>> 用户名密码不匹配 登录失败" );
continue;
}
}
}
class Handle {
public String record[] = new String[2];
public String register ( String user, String pass ) {
record[0] = user;
record[1] = pass;
return ">>> 注册成功!";
}
public boolean signIn_toLower ( String user, String pass ) {
if ( user.toLowerCase().equals( (record[0]).toLowerCase() )
&& pass.toLowerCase().equals( (record[1]).toLowerCase() ) )
/* 测试之前转换为小写字母 */
return true;
return false;
}
public boolean signIn_toUpper ( String user, String pass ) {
if ( user.toUpperCase().equals ( (record[0]).toUpperCase() )
&& pass.toUpperCase().equals ( ( record[1]).toUpperCase() ) )
/* 测试之前转换为大写字母再进行测试 */
return true;
return false;
}
}
——————————
valueOf() 转换值的基本数据形态为字符串类型
%%%%%
最后我们扩展一个小方法
String 类中的 valueOf 方法
这个是转换值的基本数据形态方法
如果你能看懂这段代码声明我会很高兴:
public static String valueOf() {
/* ... ... */
}
她是一个 静态/static 的方法
参数可以放 boolean、int、char、long、float、double 等这些基本类型
最后将这些基本类型的 值 全部转换成 字符串/String 的表示形式 返回的是转换过后的 String 字符串
%%%%%
其实也就相当于:
String.valueOf(待转换的值);
最后不管括号里的是什么类型的值 全都转换
返回一个 String 类型的字符串
%%%%%
转换示例:
/* CentOS 7 Demo:
[lilian@CentOS javaTest]$ javac Main.java
[lilian@CentOS javaTest]$ java Main
挨个显示 >>>
1
3.1415926
A
true
合并显示 >>>
13.1415926Atrue
1 3.1415926 A true
[lilian@CentOS javaTest]$
*/
class Main {
public static void main(String[] args) {
/* 这些都是基本类型的数据 */
int a = 1;
double b = 3.1415926;
char c = 'A';
boolean d = true;
/* 挨个转换成 String 后输出 */
System.out.println ( "挨个显示 >>> " );
String A = String.valueOf( a );
System.out.println ( "\t" + A );
String B = String.valueOf ( b );
System.out.println ( "\t" + B );
String C = String.valueOf ( c );
System.out.println ( "\t" + C );
System.out.printf ( "\t%s\n", String.valueOf (d) );
System.out.println();
String D = String.valueOf ( d );
System.out.println ( "合并显示 >>> " );
String E = String.valueOf ( A + B + C + D );
System.out.println ( "\t" + E );
String F = String.valueOf ( A + " " + B + " " + C + " " + D );
System.out.println ( "\t" + F );
}
}
String.valueOf(值) 的功能就是 不管你给什么类型的参数
最后都被转换且返回一个字符串
哪怕是 true/false 这种布尔变量
最后也会被转换成 true 四个字符 false 五个字符 做为一个字符串被返回 而不再表示为 真值/假值
这个方法虽然看着鸡肋 其实不然!在实际应用中 跟我们马上要讲的 StringBuffer 搭配起来 真的是无敌!