2016-05-06 5 views
0

私は2つの文字列を持っている:Stringの相違点のインデックスをインデックスから取得する方法

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

まず文字で文字列の文字の両方を比較し、索引または列なしを印刷します。文字が異なる場合。私は文字列にスペースを含める必要があります。上記ストリング内

評価:S1及びS2からインデックスの

差:34 Iは以下試み

48へ:

 char[] first = text1.toLowerCase().toCharArray(); 

     char[] second = text2.toLowerCase().toCharArray(); 

     int minimum = Math.min(first.length, second.length); 

     StringBuffer buffer = new StringBuffer(); 

     for (int i = 0; i < minimum; i++) { 

      if (first[i] != second[i]) { 
       do{ 
       //System.out.print(first[i]+" "+second[i]); 
       System.out.println(text1.offsetByCodePoints(first[i],text1.indexOf(second[i]))); 

      }while(first[i] == second[i]); 
     } 

     } 
+0

まず、do {}で無限ループが発生します。あなたはこのループで私を増やすことはありません。 第二に、なぜあなたはそれに何もしないことを書いたのですか? 最後に、diffrenceの条件はまったく正確ですが、常にs1とs2を比較していますか? – AxelH

+0

両方の文字列、つまりs1とs2を比較する必要があります。文字列に違いがある場合は、インデックスをインデックスからインデックスに変換します。 – rockersdeal

答えて

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()); 
+0

これはどういうわけか私のために働いていますが、残念ながら私は両方のファイルで約50Kの複数のレコードを持つ2つのファイルがあるという状況に遭遇しました。これで、sourceLineとtargetLineは異なることができますが、次の行または別の次の行でsourceLineを使用できます。つまり、2行を1行ずつ区別することはできません。しかし、2つのラインが同じデータセットを持っていて、わずかな変更があっても、あなたのソリューションは十分です。だからあなたのために+1。 – rockersdeal

+0

違いのある文字列も得たいです。私はString.valueOf(char)を使うべきだと思います。更新してください。 – rockersdeal

+0

どの文字が欲しいですか?テキスト1またはテキスト2のまたは両方? – aviad

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+", "); 
     } 
    } 
+0

なぜハードコード値を部分文字列に入れましたか?それは動的な値になります。 Bcoz私は異なる長さを比較する複数の文字列を持っています。たとえ値だけを出力するインデックスを印刷しなくても。 – rockersdeal

+0

入力データを変更するのは非常に難しいことではないと思います。私の答えを編集させてください –

+0

これは私を無限ループにします。動作しません – rockersdeal

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

} 

}

これを試してみてください。..

0

apache.commons.lang3.StringUtils見たりStringUtils.difference(最初の文字列、文字列を使用して、このpost

を取ります秒)あなたのコードは次のようになります

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

Apache Commonsライブラリを使用していただきありがとうございます。しかし、私の問題は解決しません。 – rockersdeal

関連する問題