@Override public JSONMsgPojo querybook(Integer id) { boolean i = Pattern.matches("^[0-9]+$",id); 怎样修改使id不报错
时间: 2024-02-28 17:57:30 浏览: 88
如果提示报错,可能是因为 `id` 参数的类型不是 `String` 类型,而是 `Integer` 类型。在使用正则表达式时,需要将 `Integer` 类型的 `id` 转为 `String` 类型,才能使用 `Pattern.matches()` 方法进行匹配。
你可以尝试将代码修改为以下形式:
```java
@Override
public JSONMsgPojo querybook(Integer id) {
boolean i = Pattern.matches("^[0-9]+$", id.toString());
// ...
}
```
在上面的代码中,我们使用 `id.toString()` 将 `id` 参数转为 `String` 类型,再将其传递给 `Pattern.matches()` 方法进行匹配。这样就可以避免类型不匹配的问题,不会再提示报错了。
相关问题
private static final String EMAIL_REGEX = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9]{2,6}$"; //手机号验证正则表达式 private static final String PHONE_REGEX = "^1[3-9]\\d{9}$"; @Override public User loginService(LoginParams loginParams) { //查询条件 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); Matcher emailMatcher = Pattern.compile(EMAIL_REGEX).matcher(loginParams.getUserAccount()); Matcher phoneMatcher = Pattern.compile(PHONE_REGEX).matcher(loginParams.getUserAccount()); //格式匹配邮箱 if (emailMatcher.matches()) { queryWrapper.eq("user_email",loginParams.getUserAccount()) .eq("user_password",MD5Utils.inputPassToFormPass(loginParams.getUserPassword())); } //格式匹配手机号 else if (phoneMatcher.matches()) { queryWrapper.eq("user_phone",loginParams.getUserAccount()) .eq("user_password",MD5Utils.inputPassToFormPass(loginParams.getUserPassword())); } //均不匹配则验证用户名 else { queryWrapper.eq("user_account",loginParams.getUserAccount()) .eq("user_password",MD5Utils.inputPassToFormPass(loginParams.getUserPassword())); } return userMapper.selectOne(queryWrapper); }
您的代码看起来非常简洁和易于阅读。这里有一些可以提高代码可读性和性能的建议:
1. 将正则表达式的编译移到类的静态初始化块中,以避免在每次方法调用时重新编译正则表达式。
2. 使用常量代替魔法数字或字符串,以提高代码的可维护性。
3. 在查询用户时,可以使用 Lambda 表达式来简化查询条件。
下面是优化后的代码:
```java
private static final String EMAIL_REGEX = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9]{2,6}$";
private static final String PHONE_REGEX = "^1[3-9]\\d{9}$";
// 编译正则表达式
private static final Pattern EMAIL_PATTERN = Pattern.compile(EMAIL_REGEX);
private static final Pattern PHONE_PATTERN = Pattern.compile(PHONE_REGEX);
@Override
public User loginService(LoginParams loginParams) {
// 查询条件
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 格式匹配邮箱
Matcher emailMatcher = EMAIL_PATTERN.matcher(loginParams.getUserAccount());
if (emailMatcher.matches()) {
queryWrapper.lambda().eq(User::getUserEmail, loginParams.getUserAccount())
.eq(User::getUserPassword, MD5Utils.inputPassToFormPass(loginParams.getUserPassword()));
}
// 格式匹配手机号
else if (PHONE_PATTERN.matcher(loginParams.getUserAccount()).matches()) {
queryWrapper.lambda().eq(User::getUserPhone, loginParams.getUserAccount())
.eq(User::getUserPassword, MD5Utils.inputPassToFormPass(loginParams.getUserPassword()));
}
// 均不匹配则验证用户名
else {
queryWrapper.lambda().eq(User::getUserAccount, loginParams.getUserAccount())
.eq(User::getUserPassword, MD5Utils.inputPassToFormPass(loginParams.getUserPassword()));
}
return userMapper.selectOne(queryWrapper);
}
```
希望这些建议能够帮助到您!
package Shoot; import java.awt.Graphics; @SuppressWarnings("unused") public class Enemy extends FlyingObject implements Award{ public static int alive=0; public static int dying=1; public static int dead=2; protected int lifeState=alive; public Enemy(int x, int y, int width, int height) { super(x, y, width, height); } public boolean hit(FlyingObject flyingObjects){ boolean result=false; int x_low=flyingObjects.x-width; int x_up=flyingObjects.x+flyingObjects.width; int y_low=flyingObjects.y-height; int y_up=flyingObjects.y+flyingObjects.height; if(x>x_low&&x<x_up&&y<y_up&&y>y_low){ result=true; } return result; } public boolean impact(Hero hero){ boolean result=false; int x_low=hero.x-width-hero.width/2; int x_up=hero.x+hero.width/2; int y_low=hero.y-height-hero.height/2; int y_up=hero.y+hero.height/2; if(x>x_low&&x<x_up&&y<y_up&&y>y_low){ result=true; } return result; } @Override public int getAward() { return 0; } public void die(){ lifeState=dying; } }
这段代码实现了一个敌人类Enemy,其中包括以下方法:
- 构造方法:生成一个敌人对象,并设置其位置和大小
- hit方法:判断敌人是否被指定的飞行物体击中
- impact方法:判断敌人是否与指定的英雄角色发生碰撞
- getAward方法:获取敌人奖励类型,这里返回0
- die方法:敌人死亡,将生命状态设为dying
该类实现了Award接口,表明敌人可能会掉落奖励道具。
同时,该类继承了FlyingObject类,说明敌人也是一种飞行物体。
这段代码中的注释较少,以下是带中文注释的代码:
```
package Shoot;
import java.awt.Graphics;
@SuppressWarnings("unused")
public class Enemy extends FlyingObject implements Award{
public static int alive=0; // 敌人的三种生命状态
public static int dying=1;
public static int dead=2;
protected int lifeState=alive; // 敌人生命状态,默认为alive
public Enemy(int x, int y, int width, int height) {
super(x, y, width, height); // 构造方法,生成一个敌人对象,并设置其位置和大小
}
public boolean hit(FlyingObject flyingObjects){
boolean result=false;
int x_low=flyingObjects.x-width;
int x_up=flyingObjects.x+flyingObjects.width;
int y_low=flyingObjects.y-height;
int y_up=flyingObjects.y+flyingObjects.height;
if(x>x_low&&x<x_up&&y<y_up&&y>y_low){
result=true; // 判断敌人是否被指定的飞行物体击中
}
return result;
}
public boolean impact(Hero hero){
boolean result=false;
int x_low=hero.x-width-hero.width/2;
int x_up=hero.x+hero.width/2;
int y_low=hero.y-height-hero.height/2;
int y_up=hero.y+hero.height/2;
if(x>x_low&&x<x_up&&y<y_up&&y>y_low){
result=true; // 判断敌人是否与指定的英雄角色发生碰撞
}
return result;
}
@Override
public int getAward() {
return 0; // 获取敌人奖励类型,这里返回0
}
public void die(){
lifeState=dying; // 敌人死亡,将生命状态设为dying
}
}
```
阅读全文