2014-10-10 2 views
0

Я пытаюсь сохранить элемент в новом массиве. Ниже мой код.Как сохранить совпадающий символ в новом массиве

for (int i = 0; i < namea1.length; i++) { 
    for (int j = 0; j < namea2.length; j++) { 
     if (namea1[i] == namea2[j]) { 
      // ans=new char[shojib[i]]; 
      count++; 
     } 
    } 
} 

Мой массив определяется следующим образом.

String name1 = "shojib"; 
String name2 = "farhana"; 
int count = 0; 
char[] namea1 = name1.toCharArray(); 
char[] namea2 = name2.toCharArray(); 

Я хочу сохранить все совпадающие символы в новый массив.

+0

@JunedAhsan, 'h' является распространенным явлением. – Ambrish

ответ

0

Попробуйте использовать ArrayList

public static void main(String[] args) { 

     String name1 = "sfhojib"; 
     String name2 = "farhana"; 
     int count = 0; 
     char[] namea1 = name1.toCharArray(); 
     char[] namea2 = name2.toCharArray(); 

     List list = new ArrayList(); 

     for (int i = 0 ; i < namea1.length ; i++) { 
      for (int j = 0 ; j < namea2.length ; j++) { 
       if (namea1[i] == namea2[j]) { 
        list.add(namea1[i]); 
       } 
      } 

     } 

     for (int i = 0 ; i < list.size() ; i++) { 
      System.out.println(list.get(i)); 
     } 
    } 

выход

f 
h 
0

Попробуйте использовать ArrayList. Попробуйте ниже ..

List<Character> match = new ArrayList<Character>(); 

//... 
// If chars are matching 
match.add(namea1[i]); 
2

Как об использовании Set, если требуется только уникальные соответствия символов:

Пример кода:

import java.util.HashSet; 
import java.util.Set; 

public class IntersectionChar { 

    public static void main(String[] args) { 
     findMatchingChars("shojib", "farhana"); 
     findMatchingChars("one", "onetwothere"); 
     findMatchingChars("temp", "test"); 
     findMatchingChars("dis", "connected"); 
     findMatchingChars("null", "empty"); 
    } 

    private static void findMatchingChars(String a, String b) { 
     Set<Character> namea1Chars = new HashSet<Character>(); 
     Set<Character> namea2Chars = new HashSet<Character>(); 

     for (char c : a.toCharArray()) { 
      namea1Chars.add(c); 
     } 

     for (char c : b.toCharArray()) { 
      namea2Chars.add(c); 
     } 

     namea1Chars.retainAll(namea2Chars); 

     System.out.println("Common Chars in " + a + " & " + b + " are => " + namea1Chars); 
    } 
} 

выход будет:

Common Chars in shojib & farhana are => [h] 
Common Chars in one & onetwothere are => [e, n, o] 
Common Chars in temp & test are => [e, t] 
Common Chars in dis & connected are => [d] 
Common Chars in null & empty are => [] 

Если вы хотите захватить все вхождения, тогда вместо этого используйте List (Хотя будет влияние на производительность:

Пример кода:

import java.util.ArrayList; 
import java.util.List; 

public class IntersectionChar { 

    public static void main(String[] args) { 
     findMatchingChars("shojib", "farhana"); 
     findMatchingChars("one", "onetwothere"); 
     findMatchingChars("tempt", "test"); 
     findMatchingChars("dis", "connected"); 
     findMatchingChars("null", "empty"); 
    } 

    private static void findMatchingChars(String a, String b) { 
     List<Character> namea1Chars = new ArrayList<Character>(); 
     List<Character> namea2Chars = new ArrayList<Character>(); 
     for (char c : a.toCharArray()) { 
      namea1Chars.add(c); 
     } 

     for (char c : b.toCharArray()) { 
      namea2Chars.add(c); 
     } 
     namea1Chars.retainAll(namea2Chars); 
     System.out.println("Common Chars in " + a + " & " + b + " are => " + namea1Chars); 
    } 
} 

Выход:

Common Chars in shojib & farhana are => [h] 
Common Chars in one & onetwothere are => [o, n, e] 
Common Chars in tempt & test are => [t, e, t] 
Common Chars in dis & connected are => [d] 
Common Chars in null & empty are => [] 

Вы также можете использовать Map для лучшей производительности

Пример кода:

import java.util.HashMap; 
import java.util.Map; 

public class IntersectionChar { 

    public static void main(String[] args) { 
     findMatchingChars("shojib", "farhana"); 
     findMatchingChars("one", "onetwothere"); 
     findMatchingChars("tempt", "test"); 
     findMatchingChars("dis", "connected"); 
     findMatchingChars("null", "empty"); 
    } 

    private static void findMatchingChars(String a, String b) { 
     System.out.print("Common Chars in " + a + " & " + b + " are => ["); 
     Map<Character, Integer> aCharCount = new HashMap<Character, Integer>(); 

     for (char c : a.toCharArray()) { 
      if(aCharCount.containsKey(c)) { 
       aCharCount.put(c, aCharCount.get(c) + 1); 
      } else { 
       aCharCount.put(c, 1); 
      } 
     } 

     for (char c : b.toCharArray()) { 
      if(aCharCount.containsKey(c)) { 
       System.out.print(c + ", "); 
       if (aCharCount.get(c) == 1) { 
        aCharCount.remove(c); 
       } else { 
        aCharCount.put(c, aCharCount.get(c) - 1); 
       } 
      } 
     } 
     System.out.println("]"); 
    } 
} 

Выход:

Common Chars in shojib & farhana are => [h, ] 
Common Chars in one & onetwothere are => [o, n, e, ] 
Common Chars in tempt & test are => [t, e, t, ] 
Common Chars in dis & connected are => [d, ] 
Common Chars in null & empty are => [] 
+0

Извините, что это не я ищу благодарность за ваш ответ. –

+0

Не уверен, что это лучшее решение, так как оно будет только указывать, какие буквы совпадают, а не сколько совпадающих вхождений –

+0

@VinceEmigh, я обновил код с несколькими решениями. – Ambrish

0

Создание массива вне цикла, или вы будете создавать новый массив каждый раз, когда вы получите соответствующий символ.

Вы можете использовать ArrayList<Character>, так как вы не знаете, какой будет размер массива (тогда используйте list.toArray(...)), но ваши примитивные символы будут автоматически загружаться и распаковываться каждый раз, когда вы добавляете/получаете из списка. Если вы не хотите этого делать, ваш лучший выбор - использовать длину самого длинного имени для char[], содержащего совпадения, а затем вручную обрезать его.

Что касается соответствия, вы можете добавить письмо в список, а затем удалить его из каждого слова, хотя для замены буквы вам потребуется какой-то «пустой» символ, который, как вы знаете, не будет в каких-либо именах.

Не использовать ArrayList

char[] name1 = "shojaaaaib".toCharArray(); 
char[] name2 = "farhana".toCharArray(); 
char[] matches = new char[name2.length]; 
final char placeHolder = '~'; 

firstName: 
for(int i = 0; i < name1.length; i++) 
    for(int j = 0; j < name2.length; j++) 
     if(name1[i] == name2[j]) 
      for(int k = 0; k < matches.length; k++) //add to matches index if possible 
       if(matches[k] == 0) { //if not set yet 
         matches[k] = name1[i]; 
        name1[i] = name2[j] = placeHolder; 
        continue firstName; 
       } 

System.out.println(matches); 

Это напечатает

haaa 

Поскольку существует 1 соответствия h и 2 соответствия a сек

Смежные вопросы