2014-10-08 23 views
-2

到目前爲止,我已經寫了一些代碼。我有兩個字符串,我需要比較字符串字符,如果兩個字符串是相同的,我想獲得匹配字符的數量。我想在java中獲得匹配字符的數字(我的意思是有多少字符匹配)

以下是我的代碼到目前爲止。我將字符串分成一個字符數組並比較字符串以獲得匹配的字符,但是我無法獲得匹配字符串的數量。

public class labExtra { 
    public static void main(String [] args) { 
     double l1,l2,biggerN; 
     String name1="Siti"; 
     String name2="Ali"; 
     l1=name1.length(); 
     l2=name2.length(); 
     if(l1>l2) { 
      biggerN=l1; 
     } 
     else { 
      biggerN=l2; 
     } 
     char [] shojib=name1.toCharArray(); 
     char [] farhana=name2.toCharArray(); 
     for(int i=0; i<shojib.length; i++) { 
      for(int j=0; j<farhana.length; j++) { 
       if(shojib[i]==farhana[j]) { 
        System.out.println(shojib[i]); 
        // ans=new char[shojib[i]]; 
        // char [] newary=shojib[i]; 
       } 
      } 
      // System.out.println(ans[i]); 
     } 
     // System.out.println(newary[0]); 
     // System.out.print(biggerN); 
    } 
} 

我怎樣才能得到有多少個字符匹配?

在我的代碼中,一個字符串是siti,另一個是ali,所以有3個匹配的字符,但我不知道如何得到這個數字。請幫我完成代碼。我真的有麻煩了。

在此先感謝老兄。

+0

問題,如這些都是更適合在Stackoverflow.com – 2014-10-08 08:29:06

+0

? – vikingsteve 2014-10-08 08:29:33

+0

@AvivCohn我很確定這是StackOverflow.com – 2014-10-08 08:33:48

回答

0

嘗試,如果這有助於:

char[] firstString = word1.toLowerCase().toCharArray(); 
char[] secondString = word2.toLowerCase().toCharArray(); 

int minLength = Math.min(firstString.length, secondString.length); 
int counter = 0; 
for(int i = 0; i < minLength; i++) 
{ 
     if (firstString[i] == secondString[i]) 
     { 
      counter++;  
     } 
} 
+0

條件應該是if(firstString [i] == secondString [i])不是!= – artapart 2014-10-08 08:48:07

+0

是的,謝謝指出:) – 2014-10-08 08:58:47

+0

請在上面的答案中看到「counter」變量的Zhuinden評論。您可以改爲「計數」。 – artapart 2014-10-08 09:01:51

0

你需要一個計數器,例如計數,由計數匹配字符0開始。 在for循環中,直到i小於較短的字符串,每次更短[i] ==更長[i],您將計數增加1,在您打印的for循環之外!

所以它是這樣的:

for(i=0;i<shorter.length();i++){ 
    if(shorter[i] == longer[i]){ 
     count+=1; 
    } 
} 
+1

你真的使用索引變量作爲「計數器」...這是打破。 – EpicPandaForce 2014-10-08 08:34:32

+0

你是對的,當然,我的意思是++ ++ – lateralus 2014-10-08 08:36:23

+0

by counter ++只顯示有多少字符匹配,不符合我的要求 – 2014-10-08 16:00:24

0

據我瞭解,你想從每個字符串匹配字符計數。你可以使用它來實現它。當您獲得匹配的第一個字符並計數爲1時,將其添加到地圖中。每次匹配字符時檢查密鑰,如果它具有該值,則將該值增加1並用相同的密鑰添加。我發佈了一些修改過的同一個程序。

public class JavaNet { 

    public static void main(String[] args) { 
     double l1, l2, biggerN; 
     Map<String, Integer> map = new HashMap<>(); 
     String name1 = "Siti"; 
     String name2 = "Ali"; 
     l1 = name1.length(); 
     l2 = name2.length(); 

     if (l1 > l2) { 
      biggerN = l1; 
     } else { 
      biggerN = l2; 
     } 

     char[] shojib = name1.toCharArray(); 
     char[] farhana = name2.toCharArray(); 

     for (int i = 0; i < shojib.length; i++) { 
      for (int j = 0; j < farhana.length; j++) { 
       if (shojib[i] == farhana[j]) { 
        System.out.println(shojib[i]); 
        int count = map.get(shojib[i] + "") != null ? map.get(shojib[i] + "") : 0; 
        map.put(shojib[i] + "", ++count); 
       } 
      } 
      // System.out.println(ans[i]); 
     } 
     System.out.println(map); 
     //  System.out.println(newary[0]); 
     // System.out.print(biggerN); 
    } 
} 
0

我可以給你一個大致的想法。雖然它看起來有點複雜。 初始化哈希映射。 迭代第一個字符串並創建字符及其​​出現的映射。這應該很簡單。如果一個密鑰已經存在,則將其值增加到其他位置1.

對第二個字符串做同樣的操作。

現在迭代hashmaps中的任何一個。當您在map1中遇到一個鍵時,請在map2中查找同一個鍵中的值(O(1)查找)。比較2個值。當它們相同時,說x的值爲x。當其中一個大於ab時,值爲a-b。現在添加所有這些,並且您有相似字符的數量

0
import java.util.*; 

public class Compare{ 

    public static void main(String []args){ 
     String word1 = "Siti"; 
     String word2 = "Ali"; 

     Map<Character,Integer> m = new HashMap<Character,Integer>(); 

     char[] charWord1 = word1.toLowerCase().toCharArray(); 
     char[] charWord2 = word2.toLowerCase().toCharArray(); 

     for(int i=0;i<charWord1.length;i++) 
     { 
      Integer freq = m.get(charWord1[i]); 
      m.put(charWord1[i], (freq == null) ? 1 : freq + 1); 
     } 
     for(int i=0;i<charWord2.length;i++) 
     { 
      Integer freq = m.get(charWord2[i]); 
      m.put(charWord2[i], (freq == null) ? 1 : freq + 1); 
     } 
     System.out.println(m); 
    } 
} 

使用地圖,分別查看每個單詞,返回實例計數。

此代碼生成:{t=1, s=1, a=1, l=1, i=3}

0

你可以試試下面的例子。代碼用評論解釋。

public class Compare{ 
    public static void main(String[] args) { 
     String name1 = "Siti"; 
     String name2 = "Ali"; 
     String matchedChars = ""; 

     String comBinedString = name1 + name2; 

     for (int i = 0; i < comBinedString.length(); i++) { 

      //Only proceed if the character has not occured previously 
      if(!matchedChars.contains(comBinedString.charAt(i) + "")){ 
       countOccurencesAndPrint(comBinedString, i); 
      } else { 
       //Skip the loop and no need to add in the matchedChars 
       continue; 
      } 

      //Add the current character matched to matchedChars 
      matchedChars += comBinedString.charAt(i); 
     } 
    } 

    private static void countOccurencesAndPrint(String stringToBeCompared, int charIndex) { 
     int counter = 0; 
     for(int i=0; i<stringToBeCompared.length(); i++) { 
      if(stringToBeCompared.charAt(i) == stringToBeCompared.charAt(charIndex)) { 
       counter++; 
      } 
     } 

     System.out.println("Character " + stringToBeCompared.charAt(charIndex)+ " found " + counter + " times"); 

    } 
} 

這會給你的輸出:你爲什麼不上正則表達式的讀了

Character S found 1 times 
Character i found 3 times 
Character t found 1 times 
Character A found 1 times 
Character l found 1 times