字符串中数字字符和字母字符的取值与比较方法
题目
长度为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”) 是正确表达;
- piece.charAt(3)=‘N’ ,charAt(index)返回ASCII值;
- piece.charAt(3).equals(‘E’) ,字符数组中没有 equals() 进函数;
- piece.substring(3).equals(‘W’) ,piece.substring(3) 是string类型,所以需要使用" "而不是’';
方法二:字符的ASCII比较
其中piece.charAt(3)==Integer.valueOf(‘N’) 和piece.charAt(3)==‘N’ 是正确表达:
- piece.charAt(3)==Integer.valueOf(‘N’) ,可
- piece.charAt(3)==Integer.parseInt(“N”) ,不可,由于charAt返回 char,不是string;
- piece.charAt(3)==‘N’ ,可;