字符串格式是二进制的,长度32
String str1 = "00000001111111000101010100001110";
String str2 = "10001001111111000101010100001110";现要对两个字符串做一个同或运算,也就是每一位相同的为1,不同的为0。考虑可能数据较多,高手赐教个高效算法
String str1 = "00000001111111000101010100001110";
String str2 = "10001001111111000101010100001110";现要对两个字符串做一个同或运算,也就是每一位相同的为1,不同的为0。考虑可能数据较多,高手赐教个高效算法
public class Ansewer28
{ public static void main(String[] args)
{
// TODO Auto-generated method stub
String str1 = "00000001111111000101010100001110";
String str2 = "10001001111111000101010100001110";
char[] ch1 = str1.toCharArray();
char[] ch2 = str2.toCharArray();
char[] temp = new char[str1.length()];
for (int i = 0; i < str1.length(); i++)
{
temp[i] = (ch1[i] == ch2[i]) ? '1' : '0';
}
System.out.println(new String(temp));
}}
public static void main(String[] args) {
String str1 = "00000001111111000101010100001110";
String str2 = "10001001111111000101010100001110";
StringBuilder xor = new StringBuilder();
for(int i = 0; i < str1.length(); i++)
{
char ch1 = str1.charAt(i);
char ch2 = str2.charAt(i);
xor.append((ch1 == ch2) ? 0 : 1 );
}
System.out.println(xor.toString());
}
}
但是看清楚两种运算的本质,就会很简单了,或运算,有1才变1,与运算,遇0则为0.
所以代码如下:public class Test { public static void main(String[] args)
{
String str1 = "00000001111111000101010100001110";
String str2 = "10001001111111000101010100001110";
char[] ch1 = str1.toCharArray();
char[] ch2 = str2.toCharArray();
for (int i = 0; i < str1.length(); i++)
{
//或运算
if(ch1[i] != '0')
ch2[i] = ch1[i];
//与运算
if(ch1[i] == '0')
ch2[i] = ch1[i];
}
System.out.println(new String(ch2));
}}这样子,能减少比较次数,不知道楼主满意否?