Java字符串-3

 

目录

15.2.3字符串的拆分

15.2.4 技能训练

15.3 String Buffer 类

15.3.1 如何使用 StringBuffer 类

1. 声明 StringBuffer 对象并初始化

2. 使用 StringBuffer 对象

15.3.2 常用的 StringBuffer 类方法

15.3.3 技能训练


实例6

package cn.jbit.classandobject;
import java.util.*;
public class Verify{
   
public static void main(String[] args) {
       
// 声明变量
       
boolean fileCorrect = false;   //标识文件名是否正确
       
boolean emailCorrect = false//标识E-mail是否正确
       
System.out.print("---欢迎进入作业提交系统---");
       
Scanner input = new Scanner(System.in);
       
System.out.println("请输入Java文件名: ");
       
String fileName = input.next();
       
System.out.print("请输入你的邮箱:");
       
String email = input.next();

       
//检查Java文件名
        
int index = fileName.lastIndexOf(".");  //"."的位置
       
if(index!=-1 && index!=0 &&
               
fileName.substring(index+1,
                       
fileName.length()).equals("java")){

            fileCorrect =
true;    //标识文件名正确
       
}else{
           
System.out.println("文件名无效。");
        }
       
//检查你的邮箱格式
       
if(email.indexOf('@')!=-1 &&
               
email.indexOf('.')>email.indexOf('@')){
            emailCorrect =
true;       //标识E-mail正确
       
}else{
           
System.out.println("E-mail无效。");
        }

        //输出检测结果
       
if(fileCorrect && emailCorrect){
           
System.out.println("作业提交成功!");
        }
else{
           
System.out.println("作业提交失败!");
        }
    }
}

示例6的运行结果如图15.13所示。

 

图15.13示例6的运行结果

判断Java文件名是否有效时,使用的判断条件如下。

index!=-1 && index!=0 &&
       
fileName.substring(index+1,
               
fileName.length()).equals("java")

index是字符 "." 在字符串中的位置,条件 "index!=-1 && index!=0" 是指字符串中包含点号并且点号不在首位。除此之外,通过substring方法获得字符后的字符串,然后判断是否是 "java",只有三个条件全部满足,才是合法的文件名。在判断邮箱名时,检查是否包含字符 "@",是否包含字符 "." 并且检查字符 "@" 是否在字符 "." 的前面。

15.2.3字符串的拆分

字符串的拆分在实际应用中也是经常用到的。

问题:有一段歌词,每句都以空格“”结尾,请将歌词的每句按行输出,效果如图15.14所示。

 

图15.14字符串的拆分

分析:要实现这个需求,只要将每句歌词按照空格“ ”拆分即可。 Java 的 String 类提供了一个拆分字符串的方法 split(), 将一个字符串分割为子字符串,结果作为字符串数组返回。

语法:

字符串  1. split (String separator, int limit);

其中:

(1) separator 可选项,标识拆分字符串时使用一个或多个字符。如果不选择该项,则返回包含该字符串所有单个字符的元素数组。

(2) limit 可选项,该值用来限制返回数组中的元素个数。

示例7

package cn.jbit.classandobject;
public class Lyric {
   
/**
     *
拆分歌词
    
*
     */
   
public static void main(String[] args) {
       
String words="长亭外 古道边 芳草碧连天 晚风扶 柳笛声残 夕阳山外山";
       
String[] printword=new String[100];//接收数组
       
System.out.println("***原歌词格式***\n"+words);
       
System.out.println("\n***拆分后歌词格式***");
        printword=
words.split(" ");//按照空格进行拆分
       
for(int i=0;i<printword.length;i++){
           
System.out.println(printword[i]);//打印输出
        
}
    }
}

运行示例 7, 效果如图 15.14 所示。

经验:

String 类操作字符串的方法很多,本章讲解了一些常见的方法,大家如果还想更深入地了解这些方法的用法,或者在实际开发中需要使用的方法本章没有讲解,可以通过查看 Java API 帮助文档,进行深入学习。

另外,由于本章讲解的方法比较多,建议学员在课下对这些方法进行汇总,以加强记忆和理解。

15.2.4 技能训练

上机练习2

练习——实现会员注册升级

需求说明

为了方便将抽奖结果及时反馈给客户,商场注册时要求会员提供身份证号和电话。要求:

  • 身份证号必须是 15 位或 18 位,手机号必须是 11 位,座机号必须以字符 "一" 连接, "一" 前必须是 4 位数,"一" 后必须是 7 位数。

  • 验证通过,方可注册成功,如果验证不通过,提示哪一步有错误。程序运行结果如图 15.15 所示。

 

图 15.15 上机练习 2 的运行结果

提示:判断座机的电话号码时,按照字符符号进行拆分,然后判断长度。

参考代码展示:

package cn.jbit.classandobject;
import java.util.Scanner;
/**
 *
上机阶段2: 实现会员注册升级
 
*
 */

public class Register2 {
   
/**
     *
验证注册信息
    
* @return flag 验证信息
    
*/
   
public String verify(String id,String cell,String phone){
       
String flag="注册成功!";
       
String[] splitphone=new String[3];
        splitphone=phone.split(
"-",2);
       
if(id.length()!=16 && id.length()!=18){
            flag=
"身份证号必须是16位或18位!";
        }
else if(cell.length()!=11){
            flag=
"手机号码必须是11位!";
        }
else if(splitphone[0].length()!=4 && splitphone[0].length()!=7){
            flag=
"座机号码区号必须为4位,电话号码必须是7位!";
        }
       
return flag;
    }
   
public static void main(String[] args) {
       
Register2 r=new Register2();
       
Scanner input = new Scanner(System.in);
       
String ID,p1,p2;
       
String resp;

       
System.out.println("***欢迎进入注册系统*** \n");
       
do{
           
System.out.print("请输入身份证: ");
            ID=
input.next();
           
System.out.print("请输入手机号: ");
            p1=
input.next();
           
System.out.print("请输入座机号: ");
            p2=
input.next();
            resp=
r.verify(ID, p1, p2);
           
System.out.println(resp);
        }
while(!resp.equals("注册成功!"));
    }
}

上机练习3

练习——判断字符出现次数

需求说明

  • 输入一个字符串,再输入要查找的字符,判断该字符在该字符串中出现的次数。

  • 程序运行结果如图 15.16 所示。

 

图 15.16 上机练习 3 的运行结果

提示:

  • 编写方法。

public int counter(String inputs,String word){
   
int counter=0;//计数器,初始化0

//……

return counter;
}

  • 使用 substring() 方法将字符串的每个字符存入数组。
  • 比较数组中每个字符是否与要求的字符相等,并计数。

参考代码展示:

package cn.jbit.classandobject;
import java.util.Scanner;
/**
 *
上机阶段3: 统计字符出现次数
 
*
 */

public class Counter {
  
public int counter(String inputs,String word){
     
int counter=0;//计数器,初始化0
     
String[] temps=new String[inputs.length()];
     
//字符串转换成数组
     
for(int i=0;i<temps.length;i++){
        
temps[i]=inputs.substring(i,i+1);       
      }
     
//比较字母,计数
     
for(int j=0;j<temps.length;j++){
        
if(temps[j].equals(word)){
            counter++;
         }
      }
     
return counter;
   }
  
public static void main(String[] args) {     
     
Scanner myinput=new Scanner(System.in);
     
Counter cnt=new Counter();
     
     
//定义2个变量,接收用户的输入
     
String myString;
     
String myWord;
     
System.out.print("请输入一个字符串:");
     
myString=myinput.next();
     
System.out.print("请输入要查找的字符:");
     
myWord=myinput.next();
     
     
//调用方法,输出结果
     
int geshu=cnt.counter(myString,myWord);
     
System.out.print("\""+myString+"\"中包含"+geshu+"\""+myWord+"\"");
   }
}

15.3 String Buffer

在 Java 中,除了使用 String 类存储字符串之外,还可以使用 StringBuffer 类存储字符串。StringBuffer也是 Java 开发人员给我们提供的用于处理字符串的一个类,而且它是比 String 类更高效的存储字符串的一种引用数据类型。特别是对字符串进行连接操作时,使用 StringBuffer 类可以大大提高程序的执行效率。

15.3.1 如何使用 StringBuffer 类

StringBuffer 类位于 java.lang 包中,是 String 类的增强类。使用 StringBuffer 类也需要两步完成。

1. 声明 StringBuffer 对象并初始化

//声明一个空的 StringBuffer 对象

StringBuffer sbl = new StringBuffer();

//声明一个字符串”青春无悔”

StringBuffer sb2 = new StringBuffer ("青春无悔”);

2. 使用 StringBuffer 对象

StringBuffer 类提供了很多方法以供使用,调用时使用操作符完成。

15.3.2 常用的 StringBuffer 类方法

下面介绍几个比较常用的 StringBuffer 类提供的方法。

语法:

字符串 1.toString();

将 StringBuffer 类型的字符串 1 转换为 String 类型的对象并返回。

例如:

String s1 = sb2.toString();

语法:

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

将字符串 2 连接到字符串 1 后并返回。

该方法和 String 类的 concat()方法一样,都是把一个字符串追加到另一个字符串后面,所不同的是 String 中只能将 String 类型的字符串追加到一个字符串后,而 StringBuffer 可以将任何类型的值追加到字符串之后。

示例8

package cn.jbit.classandobject;

public class sbAppend {
   
public static void main(String[] args) {
       
StringBuffer sb = new StringBuffer("青春无悔");
       
int num = 110;
       
//在字符串后面追加字符串
       
StringBuffer sb1 = sb.append("我心永恒");
        
System.out.println(sb1);
       
//在字符串后面追加字符
       
StringBuffer sb2 = sb1.append('');
       
System.out.println(sb2);
       
//在字符串后面追加整型数字
       
StringBuffer sb3 = sb2.append(num);
       
System.out.println(sb3);
    }
}

运行示例 8, 运行结果如图 15.17 所示。

 

图 15.17 示例 8 的运行结果

语法:

字符串 1.insert位置,参数);

将参数插入字符串 1 的指定位置(int 类型)后并返回。参数可以是包括 String 的任何类型。

问题:编写一个方法,实现将一个数字字符串转换成逗号分隔的数字串,即从右边开始每三个数字用逗号分隔,运行结果如图 15.18 所示。

 

图 15.18 用逗号分隔字符串

分析:利用 StringBuffer 类的 length() 方法,获取数字串的长度,使用 for 循环从后向前每隔三位插入一个逗号。

示例9

package cn.jbit.classandobject;
import java.util.*;
public class TestInsert {
   
/**
     *
每隔三位插入逗号
    
*
     */
   
public static void main(String[] args) {
       
Scanner input = new Scanner(System.in);
       
//接收数字串,存放于StringBuffer类型的对象中
       
System.out.print("请输入一串数字: ");
       
String nums = input.next();
       
StringBuffer str=new StringBuffer(nums);
       
//从后往前每隔三位添加逗号
       
for(int i=str.length()-3;i>0;i=i-3){
           
str.insert(i,',');
        }
       
System.out.print(str);
    }
}

运行示例 9, 运行结果如图 15.18 所示。

15.3.3 技能训练

上机练习4

指导——实现商品批发总金额的显示

训练要点

  • StringBuffer  类的使用。
  • 方法的定义和使用。

需求说明

  • 用户登录,输入用户名和密码,实现登录验证。
  • 验证通过后,显示批发商品的信息,包括商品名称和价格。
  • 输入批发商品编号和数量,显示总金额。
  • 价格的显示都采用小数点前每隔三位一个逗号的形式。
  • 程序运行结果如图 15.19 所示。

 

图 15.19 上机练习 4 的运行结果

实现思路及关键代码

(1) 创建类 Goods 。

(2) 创建属性,用来存放商品名及对应的价格。

String[] goods=new String[]{"电风扇","洗衣机","电视机","冰 箱","空调机"};
double[] price=new double[]{124.23,4500,8800.90,5000.88,4456,12000.46};

(3)  创建方法 login( ), 用来验证登录信息。

public boolean login(){
   
boolean flag=false;

//……判断登录信息

return flag;

}

(4) 创建方法 show( ), 用来显示商品名称及价格。

(5) 创建方法 change( ), 用来格式化输出。

public StringBuffer change(double d){
   
StringBuffer str=new StringBuffer(String.valueOf(d));
   
for(int i=str.indexOf(".")-3;i>0;i=i-3){
       
str.insert(i,',');
    }
   
return str;
}

(6) 编写 main( )方法,实现登录通过后,显示商品,输入批发商品编号和数量,完成总价格的格式化输出。

参考代码展示:

package cn.jbit.classandobject;
import java.util.Scanner;
/**
 *
上机阶段4: 登录并购买商品
 
*
 */

public class Goods {

   
String[] goods=new String[]{"电风扇","洗衣机","电视机","冰 箱","空调机"};
   
double[] price=new double[]{124.23,4500,8800.90,5000.88,4456,12000.46};

   
/**
     *    
登录验证
    
* @return flag登录是否成功,true为成功
    
*/
   
public boolean login(){
       
boolean flag=false;
       
Scanner input = new Scanner(System.in);

       
System.out.print("请输入用户名: ");
       
String name=input.next();
       
System.out.print("请输入密码: ");
       
String pwd=input.next();

       
if(name.equals("Wangfeng")&&pwd.equals("123.com")){
           
System.out.println("登录成功! ");
            flag=
true;
        }
else{
           
System.out.println("用户名或密码不匹配,登录失败!");
        }
       
return flag;
    }
   
/**
     *    
显示格式转换,每隔三位加逗号
    
* @param d
    
*/
   
public StringBuffer change(double d){
       
StringBuffer str=new StringBuffer(String.valueOf(d));
       
for(int i=str.indexOf(".")-3;i>0;i=i-3){
           
str.insert(i,',');
        }
       
return str;
    }
   
/**
     *    
商品显示
    
*/
   
public void showGoods(){
       
System.out.print("*********欢迎进入商品批发城*********");
       
System.out.print("\n\t编号\t商品\t价格\n");
       
for(int i=0;i<goods.length;i++){
           
System.out.print("\t"+(i+1));
           
System.out.print("\t"+goods[i]);
           
System.out.print("\t"+change(price[i])+"\n");
        }
       
System.out.println("**********************************");
    }
   
public static void main(String[] args) {
       
Scanner input=new Scanner(System.in);
       
Goods g=new Goods();
       
int serial,num;
       
double totle=0;

       
if(g.login()){
           
g.showGoods();

           
System.out.print("请输入您批发的商品编号:");
           
serial=input.nextInt();
           
System.out.print("请输入批发数量:");
           
num=input.nextInt();

            totle=
g.price[serial-1]*num;//计算总金额
           
System.out.print("您需要付款:"+g.change(totle));
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值