java 二进制数字符串转换工具类

  • 将二进制转换成八进制
  • 将二进制转换成十进制
  • 将二进制转换成十六进制
  • 将十进制转换成二进制
package com.iteye.injavawetrust.ad;

import java.util.regex.Matcher;
import java.util.regex.Pattern; /**
* 二进制转换工具类
* <ul>
* <li>将二进制转换成八进制</li>
* <li>将二进制转换成十进制</li>
* <li>将二进制转换成十六进制</li>
* <li>将十进制转换成二进制</li>
* </ul>
*
* @author InJavaWeTrust
*/
public class BinaryUtil { /**
* 将二进制整数部分转换成十进制
* @param inteter 二进制整数部分字符串
* @return 转换后的十进制数值
*/
public static int binaryIntToDecimalism(String inteter) {
int inteterSum = 0;
for (int i = inteter.length(); i > 0; i--) {
int scale = 2;
if (inteter.charAt(-(i - inteter.length())) == '1') {
if (i != 1) {
for (int j = 1; j < i - 1; j++) {
scale *= 2;
}
} else {
scale = 1;
}
} else {
scale = 0;
}
inteterSum += scale;
}
return inteterSum;
} /**
* 将二进制小数部分转换成十进制
* @param decimals 二进制小数部分字符串
* @return 转换后的十进制数值
*/
public static double binaryDecToDecimalism(String decimals) {
double decimalsSum = 0f;
for (int i = 0; i < decimals.length(); i++) {
double scale = 2;
if (decimals.charAt(i) == '1') {
if (i == 0) {
scale = 1 / scale;
} else {
for (int j = 1; j <= i; j++) {
scale *= 2;
}
scale = 1 / scale;
}
} else {
scale = 0;
}
decimalsSum += scale;
}
return decimalsSum;
} /**
* 将二进制转换成十进制
* @param binary 二进制字符串
* @return 转换后的十进制字符串
*/
public static String binaryToDecimalism(String binary) {
String sum = "";
String integer = ""; // 整数部分
String decimals = ""; // 小数部分
int integerSum = 0; // 整数部分和
double decimalsSum = 0d; // 小数部分和
if (BinaryUtil.isBinary(binary)) {
if (BinaryUtil.isContainsPoint(binary)) {
integer = binary.substring(0, binary.indexOf("."));
decimals = binary.substring(binary.indexOf(".") + 1,
binary.length());
integerSum = BinaryUtil.binaryIntToDecimalism(integer);
decimalsSum = BinaryUtil.binaryDecToDecimalism(decimals);
sum = String.valueOf(integerSum + decimalsSum);
} else {
integerSum = BinaryUtil.binaryIntToDecimalism(binary);
sum = String.valueOf(integerSum);
}
} else {
try {
throw new IllegalBinaryException(binary + " Illegal binary!");
} catch (IllegalBinaryException be) {
System.out.println(be.getMessage());
}
}
return sum;
} /**
* 将二进制整数部分转换成八进制
* @param integer 二进制字符串
* @return 转换后的八进制字符串
*/
public static String binaryIntToOctal(String integer) {
StringBuilder integerSum = new StringBuilder();
int loop = 0; // 循环次数
if (integer.length() % 3 == 0) {
loop = integer.length() / 3;
} else {
loop = integer.length() / 3 + 1;
}
String binary = "";
for (int i = 1; i <= loop; i++) {
if (i != loop) {
binary = integer.substring(integer.length() - i * 3,
integer.length() - i * 3 + 3);
} else {
binary = BinaryUtil.appendZero(
integer.substring(0, integer.length() - (i - 1) * 3),
3, true);
}
integerSum.append(BinaryUtil.binaryIntToDecimalism(binary));
}
return integerSum.reverse().toString();
} /**
* 将二进制小数部分转换成八进制
* @param xs 二进制字符串
* @return 转换后的八进制字符串
*/
public static String binaryDecToOctal(String decimals) {
StringBuilder decimalsSum = new StringBuilder();
int loop = 0; // 循环次数
if (decimals.length() % 3 == 0) {
loop = decimals.length() / 3;
} else {
loop = decimals.length() / 3 + 1;
}
String binary = "";
for (int i = 1; i <= loop; i++) {
if (i != loop) {
binary = decimals.substring(3 * (i - 1), 3 * (i - 1) + 3);
} else {
binary = BinaryUtil.appendZero(decimals.substring(3 * (i - 1)),
3, false);
}
decimalsSum.append(BinaryUtil.binaryIntToDecimalism(binary));
}
return decimalsSum.toString();
} /**
* 将二进制转换成八进制
* @param binary 二进制字符串
* @return 转换后的八进制字符串
*/
public static String binaryToOctal(String binary) {
String integer = "";
String point = "";
String decimals = "";
String integerSum = "";
String decimalsSum = "";
if (BinaryUtil.isBinary(binary)) {
if (BinaryUtil.isContainsPoint(binary)) {
integer = binary.substring(0, binary.indexOf("."));
point = ".";
decimals = binary.substring(binary.indexOf(".") + 1,
binary.length());
integerSum = BinaryUtil.binaryIntToOctal(integer);
decimalsSum = BinaryUtil.binaryDecToOctal(decimals);
} else {
integerSum = BinaryUtil.binaryIntToOctal(binary);
}
} else {
try {
throw new IllegalBinaryException(binary + " Illegal binary!");
} catch (IllegalBinaryException be) {
System.out.println(be.getMessage());
}
}
StringBuilder sum = new StringBuilder();
sum = sum.append(integerSum).append(point).append(decimalsSum);
return sum.toString();
} /**
* 将二进制整数部分转换成十六进制
* @param integer 二进制整数部分字符串
* @return 转换后的十六进制字符串
*/
public static String binaryIntToHexadecimal(String integer) {
StringBuffer integerSum = new StringBuffer();
int loop = 0; // 循环次数
if (integer.length() % 4 == 0) {
loop = integer.length() / 4;
} else {
loop = integer.length() / 4 + 1;
}
String binary = "";
for (int i = 1; i <= loop; i++) {
if (i != loop) {
binary = integer.substring(integer.length() - i * 4,
integer.length() - i * 4 + 4);
} else {
binary = BinaryUtil.appendZero(
integer.substring(0, integer.length() - (i - 1) * 4),
4, true);
}
integerSum.append(BinaryUtil.toHex(String.valueOf(BinaryUtil
.binaryIntToDecimalism(binary))));
}
return integerSum.reverse().toString();
} /**
* 将二进制小数部分转换成十六进制
* @param xs 二进制字符串
* @return 转换后的十六进制字符串
*/
public static String binaryDecToHexadecimal(String decimals) {
StringBuffer decimalsSum = new StringBuffer();
int loop = 0;
if (decimals.length() % 3 == 0) {
loop = decimals.length() / 3;
} else {
loop = decimals.length() / 3 + 1;
}
String binary = "";
for (int i = 1; i <= loop; i++) {
if (i != loop) {
binary = decimals.substring(4 * (i - 1), 4 * (i - 1) + 4);
} else {
binary = BinaryUtil.appendZero(decimals.substring(4 * (i - 1)),
4, false);
}
decimalsSum.append(BinaryUtil.toHex(String.valueOf(BinaryUtil
.binaryIntToDecimalism(binary))));
}
return decimalsSum.toString();
} /**
* 将二进制转换成十六进制
* @param binary 二进制字符串
* @return 转换后的十六进制字符串
*/
public static String binaryToHexadecimal(String binary) {
String integer = "";
String point = "";
String decimals = "";
String integerSum = "";
String decimalsSum = "";
if (BinaryUtil.isBinary(binary)) {
if (BinaryUtil.isContainsPoint(binary)) {
integer = binary.substring(0, binary.indexOf("."));
point = ".";
decimals = binary.substring(binary.indexOf(".") + 1,
binary.length());
integerSum = BinaryUtil.binaryIntToHexadecimal(integer);
decimalsSum = BinaryUtil.binaryDecToHexadecimal(decimals);
} else {
integerSum = BinaryUtil.binaryIntToHexadecimal(binary);
}
} else {
try {
throw new IllegalBinaryException(binary + " Illegal binary!");
} catch (IllegalBinaryException be) {
System.out.println(be.getMessage());
}
}
StringBuilder sum = new StringBuilder();
sum = sum.append(integerSum).append(point).append(decimalsSum);
return sum.toString();
} /**
* 将十进制整数部分转换成二进制
* @param integer 十进制整数部分
* @return 转换后的二进制
*/
public static String decimalismIntToBinary(String integer) {
return Integer.toBinaryString(Integer.parseInt(integer)).toString();
} /**
* 将十进制小数部分转换成二进制
* @param sxs 十进制整小数部分
* @return 转换后的二进制
*/
public static String decimalismDecToBinary(String decimals) {
String pre = "0.";
String all = pre + decimals;
String sum = "";
double dou = Double.parseDouble(all);
while (!String.valueOf(dou).equals("0.0")) {
dou = dou * 2;
sum += String.valueOf(dou).substring(0,
String.valueOf(dou).indexOf("."));
dou = Double.parseDouble("0."
+ String.valueOf(dou).substring(
String.valueOf(dou).indexOf(".") + 1));
}
return sum;
} /**
* 将十进制转换成二进制
* @param decimalism 十进制数字符串
* @return 转换后的二进制数字符串
*/
public static String decimalismToBinary(String decimalism) {
String binary = "";
String point = "";
String integer = "";
String decimals = "";
if (BinaryUtil.isNumber(decimalism)) {
if (BinaryUtil.isContainsPoint(decimalism)) {
integer = decimalism.substring(0, decimalism.indexOf("."));
integer = BinaryUtil.decimalismIntToBinary(integer);
point = ".";
decimals = decimalism.substring(decimalism.indexOf(".") + 1);
decimals = BinaryUtil.decimalismDecToBinary(decimals);
} else {
integer = BinaryUtil.decimalismIntToBinary(decimalism);
}
} else {
try {
throw new IllegalNumberException(decimalism
+ " Illegal number!");
} catch (IllegalNumberException be) {
System.out.println(be.getMessage());
}
}
binary = integer + point + decimals;
return binary;
} /**
* 将10~15转换成A~F
* @param binary 十六进制字符串
* @return 转换后的十六进制数值
*/
public static String toHex(String hex) {
String str = "";
switch(Integer.parseInt(hex)){
case 10 : str = "A"; break;
case 11 : str = "B"; break;
case 12 : str = "C"; break;
case 13 : str = "D"; break;
case 14 : str = "E"; break;
case 15 : str = "F"; break;
default : str = hex;
}
return str;
} /**
* 根据补位标志将源字符串补位到指定长度
* @param str 源字符串
* @param len 补位到指定长度
* @param flag 补位标志 true-左补;false-右补
* @return 补位后的字符串
*/
public static String appendZero(String str, int len, boolean flag) {
String zero = "0";
if (null == str || str.length() == 0) {
return "";
}
if (str.length() >= len) {
return str;
}
for (int i = str.length(); i < len; i++) {
if (flag) {
str = zero + str;
} else {
str += zero;
}
}
return str;
} /**
* 是否合法二进制字符串
* @param binary 二进制字符串
* @return true-合法;false-不合法
*/
public static boolean isBinary(String binary) {
boolean flag = true;
if (binary.contains(".")) {
if (binary.lastIndexOf(".") + 1 == binary.length()) {
return false;
} else if (binary.indexOf(".") == 0) {
return false;
}
char[] c = binary.toCharArray();
int sum = 0;
for (int i = 0; i < c.length; i++) {
if (c[i] == '.') {
sum += 1;
} else {
if (c[i] != '0' && c[i] != '1') {
return false;
}
}
if (sum > 1) {
return false;
}
}
} else {
char[] c = binary.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] != '0' && c[i] != '1') {
return false;
}
}
}
return flag;
} /**
* 是否包含小数点
* @param number 字符串
* @return true-包含;false-不包含
*/
public static boolean isContainsPoint(String number) {
return number.contains(".") ? true : false;
} /**
* 判断是否数字
* @param number 要判断的数字
* @return true-数字;false-非数字
*/
public static boolean isOToN(String number) {
Pattern p = Pattern.compile("\\d");
Matcher m = p.matcher(number);
return m.matches();
} /**
* 判断是否是一个合法的数字
* @param number 要判断是数字
* @return true-合法数字;false-非法数字
*/
public static boolean isNumber(String number) {
boolean flag = true;
if (number.contains(".")) {
if (number.lastIndexOf(".") + 1 == number.length()) {
return false;
} else if (number.indexOf(".") == 0) {
return false;
}
char[] c = number.toCharArray();
int sum = 0;
for (int i = 0; i < c.length; i++) {
if (c[i] == '.') {
sum += 1;
} else {
if (!BinaryUtil.isOToN(String.valueOf(c[i]))) {
return false;
}
}
if (sum > 1) {
return false;
}
}
} else {
char[] c = number.toCharArray();
for (int i = 0; i < c.length; i++) {
if (!BinaryUtil.isOToN(String.valueOf(c[i]))) {
return false;
}
}
}
return flag;
} public static void main(String[] args) throws Exception {
String binary = "110011";
System.out.println(BinaryUtil.binaryToDecimalism(binary));
System.out.println(BinaryUtil.binaryToOctal(binary));
System.out.println(BinaryUtil.binaryToHexadecimal(binary));
String integer = "51";
System.out.println(BinaryUtil.decimalismToBinary(integer)); String bin = "101011.101";
System.out.println(BinaryUtil.binaryToDecimalism(bin));
System.out.println(BinaryUtil.binaryToOctal(bin));
System.out.println(BinaryUtil.binaryToHexadecimal(bin));
String inte = "43.625";
System.out.println(BinaryUtil.decimalismToBinary(inte));
}
}
package com.iteye.injavawetrust.ad;

/**
* 非法的数字异常类
*
* @author InJavaWeTrust
*/
public class IllegalNumberException extends Exception{
private static final long serialVersionUID = 1L;
public IllegalNumberException(){ }
public IllegalNumberException(String message){
super(message);
}
}
package com.iteye.injavawetrust.ad;

/**
* 非法的二进制数异常类
*
* @author InJavaWeTrust
*/
public class IllegalBinaryException extends Exception{
private static final long serialVersionUID = 1L;
public IllegalBinaryException(){ }
public IllegalBinaryException(String message){
super(message);
}
}

java 二进制数字符串转换工具类的更多相关文章

  1. Java操作字符串的工具类

    操作字符串的工具类 import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintStre ...

  2. java日期格式转换工具类

    原文地址:http://blog.csdn.net/zhiweianran/article/details/7991531 package com.ace.backoffice.utils; impo ...

  3. java 常用Bean 转换工具类

    package com.hnf.framework.utils; import com.alibaba.fastjson.JSON; import com.fasterxml.jackson.data ...

  4. Java时间格式转换工具类

    把当前时间修改成指定时间 //把当前时间修改成指定时间 public String dateUtil(Integer seconds, String dateFormatPattern){ Date ...

  5. 日期转换工具类 CommUtil.java

    package com.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.ut ...

  6. 【Java】字节数组转换工具类

    import org.apache.commons.lang.ArrayUtils; import java.nio.charset.Charset; /** * 字节数组转换工具类 */ publi ...

  7. 我的Android进阶之旅------>Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)

    Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换) 有时候要做出如下所示的展示文件大小的效果时候,需要对文件大小进行转换,然后再进行相关的代码逻辑编写. 下面是一个Java ...

  8. Java随机字符串:随机数字字符串,工具类

    Java中生成随机数,字符串的工具类 1. 调用方法需要传入生成字符串的长度和需要的类型 生成随机数字 生成随机字母字符串 生成随机字符串+数字等 ......... 2. 总共8种类型,具体看工具类 ...

  9. java后端时间处理工具类,返回 "XXX 前" 的字符串

    转自:https://www.cnblogs.com/devise/p/9974672.html 我们经常会遇到显示 "某个之间之前" 的需求(比如各种社交软件,在回复消息时,显示 ...

随机推荐

  1. 从头开始搭建一个VSCode+NetCore的项目

    看这个前,先要对VS开发C#有所了解 获取作案工具 NetCore SDK https://www.microsoft.com/net/learn/get-started/windows 安装 建立工 ...

  2. ABP文档笔记 - 通知

    基础概念 两种通知发送方式 直接发送给目标用户 用户订阅某类通知,发送这类通知时直接分发给它们. 两种通知类型 一般通知:任意的通知类型 "如果一个用户发送一个好友请求,那么通知我" ...

  3. Luxurious Houses

    The capital of Berland has n multifloor buildings. The architect who built up the capital was very c ...

  4. Java中Semaphore(信号量)的使用

    Semaphore的作用: 在java中,使用了synchronized关键字和Lock锁实现了资源的并发访问控制,在同一时间只允许唯一了线程进入临界区访问资源(读锁除外),这样子控制的主要目的是为了 ...

  5. 最优秀的网络框架retrofit

    由于某学员要求所以我打算写一篇 标题先记录下来 我会在一周内完成此篇文章

  6. android studio 转为eclipse快捷键后还存在的问题汇总

    提取局部变量:Ctrl+Alt+V 提取全局变量:Ctrl+Alt+F 提取方法:Shit+Alt+M 使用android studio 出现红色下划线代表有错误产生,eclipse中的Ctrl+1( ...

  7. Scala:数据类型和变量

    http://blog.csdn.net/pipisorry/article/details/52902158 Scala数据类型 Scala 与 Java有着相同的数据类型,下表列出了 Scala ...

  8. WmS详解(二)之如何理解Window和窗口的关系?基于Android7.0源码

    上篇博客(WmS详解(一)之token到底是什么?基于Android7.0源码)中我们简要介绍了token的作用,这里涉及到的概念非常多,其中出现频率最高的要数Window和窗口这一对搭档了,那么我们 ...

  9. Java中synchronized的使用实例

    一.使用场景 在负责后台开发的时候,很多时候都是提供接口给前端开发人员去调用,会遇到这样的场景: 需要提供一个领奖接口,每个用户名只能领取一次,我们可以将成功领取的用户在数据库用个标记保存起来.如果这 ...

  10. 程序员的自我修养-----Java开发的必须知道的几个注意点

    1. 将一些需要变动的配置写在属性文件中 比如,没有把一些需要并发执行时使用的线程数设置成可在属性文件中配置.那么你的程序无论在DEV环境中,还是TEST环境中,都可以顺畅无阻地运行,但是一旦部署在P ...