字符串格式是二进制的,长度32
String str1 = "00000001111111000101010100001110";
String str2 = "10001001111111000101010100001110";现要对两个字符串做一个同或运算,也就是每一位相同的为1,不同的为0。考虑可能数据较多,高手赐教个高效算法

解决方案 »

  1.   


    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));
    }}
      

  2.   

    可以试试String.parseInt方法 将其装换成int类型  然后进行操作
      

  3.   

    用StringBuilder,一个个地append就行了。public class Xor {

    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());
    }

    }
      

  4.   

    不知能否用String类中的compareTo方法直接比较?
      

  5.   

    不清楚楼主到底要的是或运算还是与运算,你说的是或运算,可是你表达的却是与运算,其实不管哪种运算,你都需要比较的,无非是比较的次数多少而已。
    但是看清楚两种运算的本质,就会很简单了,或运算,有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));
        }}这样子,能减少比较次数,不知道楼主满意否?