日期:2014-05-20  浏览次数:20717 次

请问个比较两个字符串的高效方法
字符串格式是二进制的,长度32
String str1 = "00000001111111000101010100001110";
String str2 = "10001001111111000101010100001110";

现要对两个字符串做一个同或运算,也就是每一位相同的为1,不同的为0。考虑可能数据较多,高手赐教个高效算法

------解决方案--------------------
装在数组里面挨个比较不知道效率如何。
------解决方案--------------------
Java code

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类型 然后进行操作
------解决方案--------------------
用StringBuilder,一个个地append就行了。
Java code

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

------解决方案--------------------
没什么好办法,只能一个一个的比较
------解决方案--------------------
不知能否用String类中的compareTo方法直接比较?
------解决方案--------------------
不清楚楼主到底要的是或运算还是与运算,你说的是或运算,可是你表达的却是与运算,其实不管哪种运算,你都需要比较的,无非是比较的次数多少而已。
但是看清楚两种运算的本质,就会很简单了,或运算,有1才变1,与运算,遇0则为0.
所以代码如下:
Java code
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));
        }



}