字符串中数字字符和字母字符的取值与比较方法

题目

长度为4的字符串中是否由- 取值为0-4的数字+取值为00-24的数字+取值为(‘N’, ‘E’, ‘W’, ‘S’)中任意字符 3部分组成;例如110S,224N,300W

正确答案

下面展示一些 正确运行的代码

// methos 1: string 方法
public static boolean wellFormedPiecePlacement(String piece){
Boolean strResult0 = piece.substring(0,1).matches("-?[0-9]+(\\.[0-9]+)?");
    Boolean strResult1 = piece.substring(1,2).matches("-?[0-9]+(\\.[0-9]+)?");
    Boolean strResult2 = piece.substring(2,3).matches("-?[0-9]+(\\.[0-9]+)?");
    if(strResult0&&strResult1&&strResult2){
      int a=Integer.parseInt(piece.substring(0,1));
      int b=Integer.parseInt(piece.substring(1,2));
      int c=Integer.parseInt(piece.substring(2,3));
      if(a<0||a>4){return  false;}
      if(piece.substring(3).equals("N")||piece.substring(3).equals("E")||piece.substring(3).equals("W")||piece.substring(3).equals("S")){
        if(b==0||b==1){
          if (c>=0&&c<=9){return true;}
        }
        if(b==2){
          if(c>=0&&c<=4){return true;}
        }
      }

    }
    return false; 
}
// method 2, char+ASCII方法 
public static boolean wellFormedPiecePlacement(String piece) {
    if(piece==null||piece.length()==0||piece.length()!=4)return false;
     if(piece.charAt(0)<'0'||piece.charAt(0)>'4'){return  false;}
      if(piece.charAt(3)=='N'||piece.charAt(3)=='E' ||piece.charAt(3)=='W'||piece.charAt(3)=='S'){
        if(piece.charAt(1)=='0'||piece.charAt(1)=='1'){
          if (piece.charAt(2)>='0'&&piece.charAt(2)<='9'){return true;}
        }
        if(piece.charAt(1)=='2'){
          if(piece.charAt(2)>='0'&&piece.charAt(2)<='4'){return true;}
        }
      }
    return false; 
  }

解析

判断字符串(string)是否是数字

Boolean strResult0 = piece.substring(0,1).matches("-?[0-9]+(\\.[0-9]+)?");

正则表达式: “-?[0-9]+(\.[0-9]+)?”
matches 函数可用来匹配正则表达式

字符串(string)转化为int 类型

int a=Integer.parseInt(piece.substring(0,1));

还可以用

 int a=Integer.valueOf(piece.substring(0,1));

字符串(string)比较

piece.substring(3).equals("N")

拓展:
字符串长度比较:

1. str1.length()>=str.length():这种只比较字符串中的计算字符的数量,不管是中文还是英文

2. str1.getBytes().length>=str.getBytes().length:这种比较它们在内存存储中的实际长度,也就是说同一个字符,中文的存储要比英文多一个字节,也就是多一个存储空间

错误feedback

数字字符的取值和比较方法(两种)

字符数组取值
由图所示,string 转化为char[]后,只能使用valueOf()函数得到ASCII的值而不是字符本身的值。类似的还有以下处理方式:
在这里插入图片描述
int x=48(ASCII值)

char字符的取值和比较两种方法(两种)

方法一:string.equal

 Boolean strResult2=piece.charAt(3)='N')||piece.charAt(3).equals('E')
            ||piece.substring(3).equals('W')||piece.substring(3).equals("S");

其中只有 piece.substring(3).equals(“S”) 是正确表达;

  1. piece.charAt(3)=‘N’ ,charAt(index)返回ASCII值;
  2. piece.charAt(3).equals(‘E’) ,字符数组中没有 equals() 进函数;
  3. piece.substring(3).equals(‘W’)piece.substring(3) 是string类型,所以需要使用" "而不是’';

方法二:字符的ASCII比较在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其中piece.charAt(3)==Integer.valueOf(‘N’)piece.charAt(3)==‘N’ 是正确表达:

  1. piece.charAt(3)==Integer.valueOf(‘N’) ,可
  2. piece.charAt(3)==Integer.parseInt(“N”) ,不可,由于charAt返回 char,不是string;
  3. piece.charAt(3)==‘N’ ,可;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值