Java字符串-2

简介: 示例4

示例4


package cn.jbit.classandobject;
import java.util.*;
public class Login1 {
    /**
     * 登录
     *
     */
    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("TOM")&&pwd.equals("1234567")){
         System.out.print("登录成功! ");
      }else{
         System.out.print("用户名或密码不匹配,登录失败!");
      }*/
        if(uname.equalsIgnoreCase("wangfeng")&&pwd.equalsIgnoreCase("1234567")){
            System.out.print("登录成功! ");
        }else{
            System.out.print("用户名或密码不匹配,登录失败!");
        }
    }
}


运行示例4,运行结果如图15.6所示。



图15.6示例4的运行结果


那么,还有别的解决办法吗?如果在比较之前就变成全部大写或是全部小写,然后使用equals(),是否也会得到同样的效果呢?下面就来试一试。


在Java中,String类提供了两个方法改变字符串中字符的大小写,如图15.7所示。


toLowerCase():转换字符串中的英文字母为小写。

toUpperCase():转换字符串中的英文字母为大写。



图15.7改变字符串中英文字母的大小写


语法:


字符串.toLowerCase ()


返回字符串的小写形式


字符串.toUpperCase ()


返回字符串的大写形式


修改示例2,代码如下,同样可以实现忽略大小写实现登录。


if(uname.toLowerCase().equals(("WANGFENG").toLowerCase())
    &&pwd.toUpperCase().equals(("1234567").toUpperCase())){
    System.out.print("登录成功! ");
}else{
    System.out.print("用户名或密码不匹配,登录失败!");
}

15.1.4技能训练

上机练习1


指导——实现会员注册


训练要点


String类的使用。

带参方法的定义和使用。

需求说明


实现会员注册:




                                                               图15.8上机练习1的运行结果


要求注册的用户名长度不能小于3,密码长度不能小于6。

注册时两次输入的密码必须相同。如果满足要求,提示注册成功。

程序运行结果如图15.8所示。

实现思路及关键代码


(1) 创建类 Register。


(2) 创建方法verify!),用来验证用户名和密码信息。

public boolean verify(String name,String pwd1,String pwd2){
    boolean flag=false;
//……判断注册信息
return flag;
}


(3) 调用方法测试程序,利用do-while结构实现注册不成功循环注册的功能。


参考代码展示:


package cn.jbit.classandobject;
import java.util.Scanner;
/*
 * 上机阶段1: 注册
 *
 */
public class Register1 {
    /**
     * 验证注册信息
     * @return flag 验证信息
     */
    public boolean verify(String name,String pwd1,String pwd2){
        boolean flag=false;
        if(name.length()<3 || pwd1.length()<6){
            System.out.println("用户名长度不能小于3,密码长度不能小于6!");
        }else if(!pwd1.equals(pwd2)){
            System.out.println("两次输入的密码不相同!");
        }else{
            System.out.println("注册成功!请牢记用户名和密码。");
            flag=true;
        }
        return flag;
    }
    public static void main(String[] args) {
        Register1 r=new Register1();
        Scanner input = new Scanner(System.in);
        String uname,p1,p2;
        boolean resp=false;
        System.out.println("***欢迎进入注册系统*** \n");
        do{
            System.out.print("请输入用户名: ");
            uname=input.next();
            System.out.print("请输入密码: ");
            p1=input.next();
            System.out.print("请再次输入密码: ");
            p2=input.next();
            resp=r.verify(uname, p1, p2);
        }while(!resp);
    }
}

15.2 复杂的字符串处理

15.2.1字符串的连接

问题:某学员三门课的成绩分别如下:SQL 80分、Java 90分、HTML 86.7分。打印输出图15.9所示的成绩单。


图15.9成绩单


分析:使用前面已经学过的输出语句可以直接按照图15.9显示的格式输出成绩单,参考代码如下所示。


System.out.println("SQL:" + sqlScore + "  Java:" + javaScore  
+ "  HTML:" + htmlScore);

这里的 ”+” 运算符就起到了连接字符串的作用。同样,在定义一个字符串时也可以使用 ”+” 运算符进行连接,如示例5所示。

示例5

package cn.jbit.classandobject;
public class PrintScore {
    /**
     * 打印成绩单
     *
     */
    public static void main(String[] args) {
        int sqlScore = 80;         //SQL成绩
        int javaScore = 90;        //Java成绩
        double htmlScore = 86.7;   //HTML成绩
        String scoreSheet = "SQL:" + sqlScore + "  Java:" + javaScore  + "  HTML:" + htmlScore;              //成绩单
        //打印成绩单
        System.out.println("*****成绩单*****");
        System.out.println(scoreSheet);
    }
}


在示例5中,创建字符串对象scoreSheet时,使用 "+" 运算符将多个字符串连接成一个新字符串,并且使用"+" 可以将任意多个字符串连接在一起。可能大家会问,变量sqlScore、javaScore和htmlScore都是int类型,字符串和整型也可以连接吗?


请记住,在使用 "+" 运算符连接字符串和int (或double)类型数据时,"+" 将int (或double)类型数据自动转换成String类型。


除此之外,在Java中,String类也提供了另一个方法concat(),将一个字符串连接到另一个字符串的后面,语法如下。


语法:


字符串1. concat (字符串2);


字符串2被连接到字符串1的后面,返回连接后的新字符串。


使用这个方法,让计算机向你问好,代码如下所示。


String s = new String("你好,");
String name = new String("张三!");
String sentence = s.concat(name);
System.out.println(sentence);


执行完毕,字符串sentence的内容便是"你好,张三!" , s和name的值依然为 "你好,"、"张三"。


小结:连接字符串的方法有两种:使用 "+" 运算符和使用String类的concat()方法。


15.2.2字符串的提取和查询

在应用中,也会遇到要对字符串的某一部分进行查询和提取的问题。


问题:学生使用作业提交系统提交Java作业时,输入Java源代码文件名,并输入自己的邮箱,提交前系统会检查:是否是合法的Java文件名;邮箱是否为合法邮箱。编写代码,实现提交前的验证功能。


分析:判断Java的文件名是否合法,关键是判断它是不是以 “.java” 结尾的;判断邮箱是否合法,至少要检查邮箱名中是否包含字符 ”@” 和 ”.” 并检查 ”@” 是否在 ”.” 之前。要解决这样的问题,就要使用String类提供的提取和搜索字符串的方法。根据不同的情况,可以选用不同的提取和搜索字符串的方法。


表15-1列出了 String类提供的一些常用的提取和查询方法。


表15-1常用提取和查询字符串的方法



image.png

image.png


字符串是一个字符序列,每一个字符都有自己的位置,字符串事实上也是一个字符数组,因此它的位置从0开始到(字符串长度-1)结束,如图15.10所示,这是一个字符串"青春无悔",其中,"青"、"春"、"无"、"悔"的索引下标依次为0、1、2、3。


在表15-1中,前面四个方法的作用是执行搜索操作,后面三个方法用于提取字符或字符串。



图15.10字符串中的字符索引


1. indexOf( )方法

该方法是在字符串内搜索某个指定的字符或字符串,它返回出现第一个匹配字符的位置。如果没有找到匹配,则返回-1。调用时,括号中写明要搜索的字符(或字符串)的名字。例如,搜索字符串 "青春无悔" 中字符 "春" 的位置。


String s = "青春无悔";
int index = s.indexOf('春');


执行后,返回字符 "春" 的位置是1。


2. lastlndexOf( )方法

该方法也是在字符串内搜索某个指定的字符或字符串,但是它是搜索最后一个出现的字符(或字符串)的位置。例如,搜索字符串 "青春无悔无悔青春" 中最后出现字符串 "青春" 的位置。


String s = "青春无悔无悔青春";
int index = s.lastIndexOf("青春");


执行后,返回字符串 "青春" 的首字符位置,index的值为6。


3. substring(int index) 方法

该方法用于提取从位置索引开始的字符串部分,调用时括号中写的是要提取的字符串的开始位置,方法的返回值就是要提取的字符串。例如,要提取字符串 "青春无悔" 中的 "春无悔"。


String s = "青春无悔";
String result = s.substring(1);


4. substring(int beginindex, int endindex) 方法

该方法用于提取位置beginindex和位置endindex位置之间的字符串部分。特别要注意的是,对于开始位置beginindex,Java是基于字符串的首字符为0来进行处理的,但是对于终止位置endindex,Java是基于字符串的首字符为1来处理的,如图15.11所示。




图15.11字符串中的字符索引


例如,要提取"青春无悔无悔青春"中的"无悔无悔"。


String s = "青春无悔无悔青春";
String result = s.substring(2,6);

5. trim( )方法

该方法可以忽略字符串前后的空格,因此在实现图15.12所示的需求时使用。在接收用户输入的字符串时,一般会调用trim()方法过滤掉字符串前后的多余空格。




图15.12 trim()的用武之地


可见,要想在程序中处理好字符串,关键是将这些方法巧妙地结合起来,灵活运用。下面就来解决刚才提出的问题,如示例6所示。


相关文章
|
3月前
|
安全 Java API
【Java字符串操作秘籍】StringBuffer与StringBuilder的终极对决!
【8月更文挑战第25天】在Java中处理字符串时,经常需要修改字符串,但由于`String`对象的不可变性,频繁修改会导致内存浪费和性能下降。为此,Java提供了`StringBuffer`和`StringBuilder`两个类来操作可变字符串序列。`StringBuffer`是线程安全的,适用于多线程环境,但性能略低;`StringBuilder`非线程安全,但在单线程环境中性能更优。两者基本用法相似,通过`append`等方法构建和修改字符串。
66 1
|
26天前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
99 60
|
16天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
36 6
|
1月前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
50 15
|
1月前
|
Java
JAVA易错点详解(数据类型转换、字符串与运算符)
JAVA易错点详解(数据类型转换、字符串与运算符)
50 4
|
2月前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
52 3
|
2月前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
18 2
|
2月前
|
存储 移动开发 Java
java核心之字符串与编码
java核心之字符串与编码
23 2
|
2月前
|
Java
Java实现:将带时区的时间字符串转换为LocalDateTime对象
通过上述方法,你可以将带时区的时间字符串准确地转换为 `LocalDateTime`对象,这对于处理不需要时区信息的日期和时间场景非常有用。
769 4
下一篇
无影云桌面