一、String
关于String的概述和使用方法在上一篇关于API(上)已经详细的讲述了,大家可以在上一篇进行浏览与学习。
1、String的注意事项
- String对象的内容不可改变,被称为不可变字符串对象。
结论:每次试图改变字符串对象实际上是新产生了新的字符串对象了,变量每次都是指向新的字符串对象,之前字符串对象的内容确实是没有改变的,因此说String的对象是不可变的。
-
- 只要是以“…”方式写出的字符串对象,会存储到字符串常量池,且相同内容的字符串只存储一份;
- 但通过new方法创建字符串对象,每new一次都会产生一个新的对象放在堆内存中。
2、String的应用案例
例子:完成用户登录
需求:系统正确的登录名和密码是:admin/123456,请在控制台开发一个登录界面,接收用户输入的登录名和密码,判断用户是否登录成功,登录成功后展示:“欢迎进入系统!”,即可停止程序。(注意:要求最多给用户三次登录机会)
代码如下:
package com.api.code.String;
import java.util.*;
/**
* user:liaoxinyue
**/
public class Login {
public static void main ( String[] args ) {
//目标:实现用户登录
//登录:一个独立的功能(独立功能独立方法)
Scanner scanner = new Scanner ( System.in );
for ( int i = 0 ; i < 3 ; i++ ) {
System.out.println ( "第" + ( i + 1 ) + "登录" );
System.out.println ( "请你输入登录账户" );
String name = scanner.next ( );
System.out.println ( "请输入登录密码" );
String pwd = scanner.next ( );
String reasult = login ( name , pwd );
if ( "success".equals ( reasult ) ) {
System.out.println ( "登录成功,欢迎进入系统" );
break;
} else {
System.out.println ( reasult );
}
}
}
public static String login ( String username , String pwd ) {
String name = "admin";
String password = "123456";
if ( name.equals ( username ) ) {
if ( password.equals ( pwd ) ) {
return "success";
} else {
return "密码输入错误";
}
} else {
return "账户输入错误";
}
}
}
运行结果如下:
3、使用String来开发验证码
需求:实现随机验证码,验证码的每位可能是大小写字母、数字。
分析:
- 设计一个方法,该方法接收一个整型参数,最终要返回对应位数的随机验证码。
代码如下:
package com.api.code.String;
import java.util.*;
/**
* user:liaoxinyue
**/
public class StringYanzhengma {
public static void main ( String[] args ) {
System.out.println ( create ( 5 ) );
System.out.println ( create ( 8 ) );
}
private static String create ( int n) {
String code = "";//记住验证码
String data = "abrcdEF2G13HI4JKL56efRij78STklmUVWno9XYpqZstuOPNvwMghQxyz";//随机字符
Random random=new Random ( );
for ( int i = 0 ; i < n ; i++ ) {
//2、随机产生一个索引
int index=random.nextInt (data.length ());
//3、提取对应索引位置处的字符
char c=data.charAt ( index );
//4、拼接code连接
code+=c;
}
return code;
}
}
运行结果如下:
二、ArrayList
1、什么是集合?
集合是一种容器,用来装数据的,类似于数组。
数组与集合的区别?
- 数组定义完成并启动后,长度就固定了。
- 集合大小可变,开发中用的更多。
2、ArrayList如何使用
ArrayList< E >是用的最多,最常见的集合。ArrayList是泛型类,可以约束存储的数据类型。
创建对象,调用无参数构造器初始化对象:public ArrayList();
调用相应的增删改查方法。
3、ArrayList提供了那些常用的方法呢?
代码如下:
package com.api.code.ArrayList;
import java.util.*;
/**
* user:liaoxinyue
**/
public class ArrayListDemo {
public static void main ( String[] args ) {
// 目标:掌握ArrayList集合的创建和使用
// 7、创建ArrayList集合的对象。(一个容器,大小可变,数据可以重复,有索引)
ArrayList arrayList = new ArrayList ( );
arrayList.add ( "java" );
arrayList.add ( "java" );
arrayList.add ( 100 );
arrayList.add ( 90 );
arrayList.add ( "林徽因" );
System.out.println ( arrayList );
System.out.println ( "=================================" );
// 1、插入数组
arrayList.add ( 1 , "鹿晗" );
System.out.println ( arrayList );
// 2、根据索引获取数据,
// arrayList.indexOf ( 5 );
arrayList.get ( 5 );
System.out.println ( arrayList.get ( 5 ) );
System.out.println ( "=================================" );
// 3、获取集合大小(元素个数)
System.out.println ( arrayList.size ( ) );
System.out.println ( arrayList );
System.out.println ( "=================================" );
// 4、根据索引删除数据,返回被删除的数据。
// arrayList.remove ( 3 );
//返回删除后的该位置的数据
System.out.println ( arrayList.remove ( 3 ) );
System.out.println ( "=================================" );
// 5、直接删除数据,返回真假
// arrayList.remove ( "java" );
System.out.println ( arrayList.remove ( "java" ) );
System.out.println ( "=================================" );
// 6、修改某个索引位置处的数据,返回修改前的数据
System.out.println ( arrayList.set ( 1 , "lay" ) );
System.out.println ( arrayList );
}
}
运行结果如下:
4、ArrayList的应用案例。
需求:现在‘加入购物车中存储了如下这些商品:Java,枸杞,黑枸杞,拖鞋。现在用户不想购买枸杞,需要批量删除,请完成该需求。
分析:
1、后台使用ArrayList表示购物车,存储这些商品名。
2、遍历集合中的数据,只要这个数据包含了枸杞,就删除它。
代码如下:
package com.api.code.ArrayList;
import java.util.*;
/**
* user:liaoxinyue
**/
public class ArrayListDemo2 {
public static void main ( String[] args ) {
ArrayList < String > arrayList = new ArrayList ( );
arrayList.add ( "java" );
arrayList.add ( "枸杞" );
arrayList.add ( "黑枸杞" );
arrayList.add ( "拖鞋" );
System.out.println ( arrayList );
for ( int i = 0 ; i < arrayList.size ( ) ; i++ ) {
String name = arrayList.get ( i );
if ( name.contains ( "枸杞" ) ) {
arrayList.remove ( i );
i--;//一、删除后回退一步,才可以保证删除数据,不会漏删
}
}
System.out.println ( arrayList );
System.out.println ( "================================" );
ArrayList < String > arrayList1 = new ArrayList ( );
arrayList1.add ( "java" );
arrayList1.add ( "枸杞" );
arrayList1.add ( "黑枸杞" );
arrayList1.add ( "黑枸杞" );
arrayList1.add ( "黑枸杞" );
arrayList1.add ( "黑枸杞" );
arrayList1.add ( "拖鞋" );
System.out.println ( arrayList1 );
for ( int i = arrayList1.size ( ) - 1 ; i >= 0 ; i-- ) {
String name = arrayList1.get ( i );
if ( name.contains ( "枸杞" ) ) {
arrayList1.remove ( name );
}
}
System.out.println ( arrayList1 );
}
}
运行结果如下:
5、ArrayList综合案例
需求:完成菜品的上架、以及菜品信息浏览功能。
目标:使用所学的ArrayList集合结合面向对象编程实现以上2个需求。
代码如下:
自定义菜品类
package com.api.code.ArrayList;
/**
* user:liaoxinyue
**/
public class Food {
private String name;
private double price;
private int num;
public String getName ( ) {
return name;
}
public void setName ( String name ) {
this.name = name;
}
public double getPrice ( ) {
return price;
}
public void setPrice ( double price ) {
this.price = price;
}
public int getNum ( ) {
return num;
}
public void setNum ( int num ) {
this.num = num;
}
public Food(){
}
public Food ( String name , double price , int num ) {
this.name = name;
this.price = price;
this.num = num;
}
}
自定义菜品操作类
package com.api.code.ArrayList;
import java.util.*;
/**
* user:liaoxinyue
**/
public class FoodTest {
//菜品操作类
private ArrayList < Food > foodArrayList = new ArrayList <> ( );
Scanner sc = new Scanner ( System.in );
boolean isFlag = true;
public void start ( ) {
while ( true ) {
System.out.println ( "商家管理系统" );
System.out.println ( "1、上架菜品" );
System.out.println ( "2、下架菜品" );
System.out.println ( "3、展示" );
// System.out.println ( "4、退出系统" );
// do {
System.out.println ( "请输入你需要操作的序号" );
Scanner scanner = new Scanner ( System.in );
int cammend = scanner.nextInt ( );
switch ( cammend ) {
case 1:
System.out.println ( "请输入你需要上架的菜品信息" );
addFood ( );
break;
case 2:
System.out.println ( "请输入你需要下架的菜品信息" );
removeFood ( );
break;
case 3:
showFood ( );
break;
default:
System.out.println ( "输入错误" );
}
}
}
private void removeFood ( ) {
System.out.println ( "========下架菜品==============" );
showFood ( );
Food food = new Food ( );
System.out.println ( "请输入要下架的菜品名称" );
}
private void addFood ( ) {
System.out.println ( "========上架菜品==============" );
//每个用户上架的菜品实际为集合中新增一个对象。
Food food = new Food ( );
//为菜单注入数据
System.out.println ( "请输入菜品名称" );
String name = sc.next ( );
food.setName ( name );
System.out.println ( "请输入菜品价格" );
double price = sc.nextDouble ( );
food.setPrice ( price );
System.out.println ( "请输入菜品数量" );
int num = sc.nextInt ( );
food.setNum ( num );
foodArrayList.add ( food );
System.out.println ( "======上架成功========" );
System.out.println ( food.getName ( ) + "\t" + food.getPrice ( ) + "\t" + food.getNum ( ) );
}
public void showFood ( ) {
for ( int i = 0 ; i < foodArrayList.size ( ) ; i++ ) {
Food food = foodArrayList.get ( i );
System.out.println ( food.getName ( ) + "\t" + food.getPrice ( ) + "\t" + food.getNum ( ) );
}
}
}
启动类
package com.api.code.ArrayList;
/**
* user:liaoxinyue
**/
public class ArrayListDemo3 {
public static void main ( String[] args ) {
FoodTest foodTest=new FoodTest ();
foodTest.start ();
}
}
运行结果: