C型整形数的判断

/*
昨天看到有人提问,今天没有找到提的问题,题目大概意思是:
可以一直输入字符串,按Ctrl+Z结束,输入一个字符串,判断该字符串是否是一个C整形数据,

C整形数据定义为:

是输入 Yes,不是输出 No
*/




import java.util.Scanner;


public class Test {
//实现方法二
public static boolean isC1(String str){
boolean result = true;
char c;
char start1,start2;
int len = 0;

len = str.length();
start1 = str.charAt(0);
if(start1>='0' && start1<='9'){
if(len>1 && '0'==start1){
start2 = str.charAt(1);
if('x'==start2 || 'X'==start2){
if(len > 2){
for(int i=2; i<len; i++){
c = str.charAt(i);
if(c<'0' || c>'9'&&c<'A' || c>'F'&&c<'a' || c>'f'){
result = false;
break;
}
}
}else{
result = false;
}
}else{
for(int i=1; i<len; i++){
c = str.charAt(i);
if(c<'0' || c>'7'){
result = false;
break;
}
}
}
}else{
for(int i=1; i<len; i++){
c = str.charAt(i);
if(c<'0' || c>'9'){
result = false;
break;
}
}
   }
}else{
result = false;
}
return result;
}

public static boolean isOk(int flag, String str){
boolean result = true;
char c;

//十进制数
if(0 == flag){
for(int i=0; i<str.length(); i++){
c=str.charAt(i);
if(c<'0' || c>'9'){
result = false;
break;
}
}
}
//八进制数
if(1 == flag){
for(int i=0; i<str.length(); i++){
c=str.charAt(i);
if(c<'0' || c>'7'){
result = false;
break;
}
}
}
//十六进制数
if(2 == flag){
for(int i=0; i<str.length(); i++){
c=str.charAt(i);
if(c<'0' || c>'9'&&c<'A' || c>'F'&&c<'a' || c>'f'){
result = false;
break;
}
}
}
return result;
}

//实现方法一
public static boolean isC(String str){
boolean result = true;
int flag = 0; //0:[十进制] 1:[八进制] 2:[十六进制]
char start1,start2;
int len = 0;
String temp = null;

len = str.length();
if(2 < len){
start1 = str.charAt(0);
start2 = str.charAt(1);
if('0'==start1 && ('x'!=start2&&'X'!=start2)){
flag = 1;
}else if('0'==start1 || 'x'==start2 || 'X'==start2){
flag = 2;
}
temp = str.substring(2);
switch(flag){
case 0: result=isOk(flag,temp);break;
case 1: result=isOk(flag,temp);break;
case 2: result=isOk(flag,temp);break;
}
}else{
if(1 == len){
flag = 0;
result = isOk(flag,str);
}
if(2 == len && '0'==str.charAt(0)){
flag = 1;
result = isOk(flag,str);
}
if(2 == len && '0'!=str.charAt(0)){
flag = 0;
result = isOk(flag,str);
}
}
return result;
}


public static void main(String[] args){
String tempStr = null;
boolean flag = false;

System.out.println("请输入需要测试的C整型数据,按Ctrl+Z结束");
Scanner in = new Scanner(System.in);
while(in.hasNext()){
tempStr = in.nextLine().trim();
isC1(tempStr);
flag = isC(tempStr);
tempStr = null;
if(flag){
System.out.println("Yes");
}else{
System.out.println("No");
}
}
System.out.println("结束了!");
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值