/* * Copyright c 2005-2009. */ /******************************************************************************** * @author chaostone * * MODIFICATION DESCRIPTION * * Name Date Description * ============ ============ ============ * chaostone 2006-7-14 Created * ********************************************************************************/ package org.beanfuse.lang; import org.apache.commons.lang.StringUtils; public final class BitStringUtil { private BitStringUtil() { } /** * 比较两个等长字符串的每一位,若都大于0,则返回结果的相应位为1,否则为0; * * @param first * @param second * @return */ public static String and(final String first, final String second) { final StringBuilder buffer = new StringBuilder(); for (int i = 0; i < first.length(); i++) { if ('0' == first.charAt(i) || '0' == second.charAt(i)) { buffer.append('0'); } else { buffer.append('1'); } } return buffer.toString(); } /** * 比较两个等长字符串的每一位,相或<br> * 适用于仅含有1和0的字符串. * * @param first * @param second * @return */ public static String or(final String first, final String second) { final StringBuilder buffer = new StringBuilder(); for (int i = 0; i < first.length(); i++) { if ('0' == first.charAt(i) && '0' == second.charAt(i)) { buffer.append('0'); } else { buffer.append('1'); } } return buffer.toString(); } /** * 将一个字符串,按照boolString的形式进行变化. 如果boolString[i]!=0则保留str[i],否则置0 * * @param str * @param boolString * @return */ public static String andWith(final String str, final String boolString) { if (StringUtils.isEmpty(str)) { return null; } if (StringUtils.isEmpty(boolString)) { return str; } if (str.length() < boolString.length()) { return str; } final StringBuilder buffer = new StringBuilder(str); for (int i = 0; i < buffer.length(); i++) { if (boolString.charAt(i) == '0') { buffer.setCharAt(i, '0'); } } return buffer.toString(); } /** * 将"314213421340asdf"转换成"1111111111101111" * * @param first * @return */ public static String convertToBoolStr(final String first) { final StringBuilder occupyBuffer = new StringBuilder(first.length()); for (int i = 0; i < first.length(); i++) { if ('0' == first.charAt(i)) { occupyBuffer.append('0'); } else { occupyBuffer.append('1'); } } return occupyBuffer.toString(); } /** * 返回零一串的整型值 * * @param binaryStr * @return */ public static long binValueOf(final String binaryStr) { if (StringUtils.isEmpty(binaryStr)) { return 0; } long value = 0; long height = 1; for (int i = binaryStr.length() - 1; i >= 0; i--) { if ('1' == binaryStr.charAt(i)) { value += height; } height *= 2; } return value; } public static String reverse(final String binaryStr) { final StringBuilder occupyBuffer = new StringBuilder(binaryStr.length()); for (int i = 0; i < binaryStr.length(); i++) { if ('0' == binaryStr.charAt(i)) { occupyBuffer.append('1'); } else { occupyBuffer.append('0'); } } return occupyBuffer.toString(); } }