如何从索引到索引获取String的差异索引?

时间:2016-05-06 09:49:09

标签: java string

我有两个字符串:

public partial class Form1 : Form
{
    private Queue<Face> faces= new Queue<Face>();


    public Form1()
    {
        InitializeComponent();

        int x = 20;
        int y = 70;       
        int lenght= 5;
        int height= 5;
        int diameter = 20; 

        face = new Face (x, y, lenght, height, diameter);

        faces.Enqueue(face);
    }        

    protected override void OnMouseClick(MouseEventArgs e)
    {            

        Invalidate();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        Graphics g = e.Graphics;

        face.DrawFace(g);    
        face.DrawLeftEye(g);
        face.DrawRightEye(g);
        Invalidate(); 

    }                
}

首先逐字符比较字符串字符并打印索引或列号。如果字符不同。我需要在字符串中包含空格。

与上面的字符串一样:

s1和s2的指数差异:34到48。

我试过以下:

String s1 = "D3516025204        StackOverflow is good.";
String s2 = "D3516025204        StackOverflow Nice to see you.";

4 个答案:

答案 0 :(得分:0)

试试这个。

    String s1 = "D3516025204        StackOverflow is good.";
    String s2 = "D3516025204        StackOverflow Nice to see you.";

    if(s1.length() > s2.length()){
        for(int i=0; i< s1.length() - s2.length(); i++)
            s2+=" ";
    }else{
        for(int i=0; i< s2.length() - s1.length(); i++)
            s1+=" ";
    }
    char[] c1 = s1.toCharArray();
    char[] c2 = s2.toCharArray();

    System.out.print("Difference is: ");
    for(int i=0; i<c1.length; i++){
        if(c1[i]!=c2[i]){
            System.out.print(i+", ");
        }
    }

答案 1 :(得分:0)

class CrazySolution {
public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String line = br.readLine();
    String line1 = br.readLine();
    //process()
    int lenofLine = line.length();
    int lenofLine1 = line1.length();
    int finalLen = Math.min(lenofLine, lenofLine1);

    for (int i = 0; i < finalLen; i++) {
        if (line.charAt(i) != line1.charAt(i))
           {
            System.out.println(i);
        break;
         }
    }
    System.out.println(lenofLine == lenofLine1 ? -1 : finalLen);

}

}

试试这个..

答案 2 :(得分:0)

看看apache.commons.lang3.StringUtils或这个post

使用StringUtils.difference(String first,String second)你的代码看起来像这样

public static void main(String[] args) {
    String s1 = "D3516025204        StackOverflow is good.";
    String s2 = "D3516025204        StackOverflow Nice to see you.";
    String s = StringUtils.difference( s1, s2);
    int at = StringUtils.indexOfDifference(s1, s2);
    System.out.println(at + "-" + s2.length());
    System.out.println(s);
}

答案 3 :(得分:0)

    String text1 = "D8516025209        StackOverflow is good.";
    String text2 = "D3516025204        StackOverflow Nice to see you.";

    int minimum = Math.min(text1.length(), text2.length());
    int maximum = Math.max(text1.length(), text2.length());

    StringBuilder stringBuilder = new StringBuilder("Difference of indices from s1 and s2: ");
    StringBuilder text1Diff = new StringBuilder();
    StringBuilder text2Diff = new StringBuilder();
    int index = 0;

    while (index < minimum)
    {
        if (text1.charAt(index) != text2.charAt(index))
        {
            stringBuilder.append(stringBuilder.length() > 0 ? ", " : "").append(index + 1).append(" - ");
            text1Diff.append(text1Diff.length() > 0 ? ", " : "");
            text2Diff.append(text2Diff.length() > 0 ? ", " : "");

            while ((index < minimum) && (text1.charAt(index) != text2.charAt(index)))
            {
                text1Diff.append(text1.charAt(index));
                text2Diff.append(text2.charAt(index));
                index++;
            }

            if (index == minimum)
            {
                stringBuilder.append(maximum);
                index = maximum;

                if (maximum == text1.length())
                    text1Diff.append(text1.substring(minimum));
                else
                    text2Diff.append(text2.substring(minimum));
            }
            else
                stringBuilder.append(index);
        }
        index++;
    }

    if (minimum != maximum && index < maximum)
    {
        stringBuilder.append(stringBuilder.length() > 0 ? ", " : "").append(minimum + 1).append(" - ").append(maximum);

        if (maximum == text1.length())
            text1Diff.append(text1.substring(minimum));
        else
            text2Diff.append(text2.substring(minimum));
    }

    System.out.println(stringBuilder.toString());
    System.out.println("Differences: ");
    System.out.println(text1Diff.toString());
    System.out.println(text2Diff.toString());