在Java中判断一个数是否为二进制数,可以通过以下两种常用方法实现:
一、使用正则表达式判断
通过检查输入字符串是否仅包含`0`和`1`来判断是否为二进制数。具体实现如下:
```java
import java.util.Scanner;
public class BinaryChecker {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个数: ");
String input = scanner.nextLine();
if (isBinary(input)) {
System.out.println("是二进制数");
} else {
System.out.println("不是二进制数");
}
scanner.close();
}
public static boolean isBinary(String s) {
return s != null && s.matches("+");
}
}
```
说明:
1. 使用`matches("+")`方法判断字符串是否仅包含`0`和`1`,且至少有一个字符;
2. 需注意输入可能包含前缀`0b`或`0B`,此时需先去除前缀再判断。
二、使用位运算判断
利用二进制数的特性(仅有一位为`1`)来判断。具体实现如下:
```java
public class BinaryChecker {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个数: ");
int num = scanner.nextInt();
if (isPowerOfTwo(num)) {
System.out.println("是2的整数次幂(二进制仅含1)");
} else {
System.out.println("不是2的整数次幂");
}
scanner.close();
}
public static boolean isPowerOfTwo(int n) {
if (n < 1) return false;
return (n & (n - 1)) == 0;
}
}
```
说明:
1. 该方法判断输入是否为2的整数次幂,2的幂次在二进制中仅有一位为`1`;
2. 通过`n & (n - 1)`运算,若结果为`0`,则`n`是2的幂次;
3. 该方法仅适用于非负整数,负数不满足条件。
补充说明
输入处理:若输入可能包含二进制前缀(如`0b1010`),建议先使用`Integer.parseInt(input, 2)`进行解析,若抛出`NumberFormatException`则不是二进制数;
负数处理:负数在二进制中通常以补码形式表示,不满足仅含`0`和`1`的条件,需根据具体需求调整判断逻辑。
根据具体需求选择合适的方法,若仅需判断非负整数是否为2的幂次,位运算方法更高效;若需判断任意二进制字符串,正则表达式更灵活。