Java - 如何获取字符串的更改部分

时间:2014-06-20 10:04:59

标签: java

是否有可能,以及如何获得字符串的更改部分?

让我们说我不断检查字符串是否有变化但是当它确实改变时,变化是在字符串中随机的某个地方而不是在同一个地方。我如何找出更改的内容并将其存储在单独的字符串中?

String Original = "Random Text"; 
String Changed = "ra7ndom Text"
String Output = "7";

public void getChange() {
// ??
}

I need to get what was added to the string, after it was modified.

4 个答案:

答案 0 :(得分:1)

我的解决方案是:

public int getFirstChangeIndex(CharSequence original, CharSequence changed)
{
    int n = original.length();
    for (int i = 0; i < n; i++)
    {
        if (original.charAt(i) != changed.charAt(i))
            break;
        n++;
    }
}

答案 1 :(得分:0)

没有一种简单的方法/方法可以帮到你。你可以编写一个方法,它遍历两个字符串,比较每个字符并返回字符串中的差异。

查看此问题:What is the easiest/best/most correct way to iterate through the characters of a string in Java?

或者您可以使用具有更多高级功能的外部库。一个好的是Google-diff-match-patch

答案 2 :(得分:0)

另一种解决方案是使用Apache Commons StringUtils'difference方法。

答案 3 :(得分:0)

不存在快速简便的方法,您需要比较字符串中的每个字符。请注意,字符串本身永远不会更改,它们是不可变的,但您可以比较不同的字符串。

这是我敲了一下的东西,它会告诉你第一个的区别是,随意根据你的需要进行调整:

String oldString = "abcdexghijklmn";
String newString = "abcdefghijklm";

//get length of longer string
int end = Math.max(oldString.length(), newString.length());

//loop through strings
for (int position=0; position<end; position++) {

  if (position>=newString.length()) {

    // Reached the end of new string
    System.out.println("Difference at position "+position+" new string is shorter");
    break;

  } else if (position>=oldString.length()) {

    // Reached the end of old string
    System.out.println("Difference at position "+position+" new string is longer");
    break;

  } else {

    //compare characters at this position       
    char newChar = newString.charAt(position);
    char oldChar = oldString.charAt(position);
    if (newChar!=oldChar) {
      System.out.println("Difference at position "+position);
      break;
    }

  }

}