1

I want to build a simple dictionary search program without using dictionary library. I want to search the string array if the string in array is equal to the char array. It should print the string and its index number. If there are 2 strings that are matching the char then it should print the first string and leave the after string

.e.g String array["fine","rest","door","shine"] char character ['t','r','e','s']. the answer should be "rest" at index 1. and if the String rest is repeat then it should only print first one.

I tried to compare the string array and char array but its returning all the words of string array that matches char array.

String strArray[]=new String[4];
char chrArray[]=new char[4]; 
String value="";
char compare;
System.out.println("Enter the words :");
    for(int i=0;i<strArray.length;i++){
    strArray[i]=input.next();

    } 
    System.out.println("Enter the Characters :");
    for (int i = 0; i < chrArray.length; i++) {
        chrArray[i]=input.next().charAt(0);

    }

    for (int i = 0; i < strArray.length; i++) {
            if(strArray[i].length()==chrArray.length){
                 if(""+strArray[i]!=value){
               value="";
            }
        for (int j = 0; j < strArray[i].length(); j++) {

            for (int k = 0; k < chrArray.length; k++) {


                if(strArray[i].charAt(j)==chrArray[k]){
                value=value+strArray[i].charAt(j);   

                }
            }
            }
        }

}
        System.out.println(value);

The output should be the string from array that is equal to char array.

3
  • "if(""+strArray[i]!=value){" isn't the correct way to compare strings. The + is redundant (unless you expect strArray[i] to be null), and then you'd need to use equals (either strArray[i].equals(value), or Objects.equals(strArray[i], value) if you think it might be null). Commented Jan 1, 2019 at 11:20
  • Format code correctly Commented Jan 1, 2019 at 11:22
  • I m a beginner and i don't know if my code is correct but if some one just write this program i will be very thankful.The code i want is described above. Commented Jan 1, 2019 at 11:29

2 Answers 2

6

You can sort char array and then compare it using Arrays.equal. By sorting char array, there will be no need to use 2 for loops.

import java.util.Arrays;
import java.util.Scanner;

public class Bug {

        public static void main(String[] args) {
            String strArray[]=new String[4];
            char chrArray[]=new char[4];
            Scanner input = new Scanner(System.in);
            System.out.println("Enter the words :");
            for(int i=0;i<strArray.length;i++){
                strArray[i]=input.next();

            }
            System.out.println("Enter the Characters :");
            for (int i = 0; i < chrArray.length; i++) {
                chrArray[i]=input.next().charAt(0);

            }
            Arrays.sort(chrArray);

            for (int i = 0; i < strArray.length; i++) {
                char[] x = strArray[i].toCharArray();
                Arrays.sort(x);
                if(Arrays.equals(chrArray, x))
                {
                    System.out.println(strArray[i]);
                    break;
                }
            }
        }

 }
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks u Mukesh for your code ,i was trying this from 2 days.God Bless You.
Happy to help. Welcome @Ali
0

You could also create a Map<Character, Integer> to store counts for both the words and the characters, and compare each word character counts with the character counts. If both are equal, print it out.

Demo:

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

public class Example {
    private static final String[] words = {"fine", "rest", "door", "shine"};
    private static final char[] chars = {'t', 'r', 'e', 's'};

    /**
     * Initialise String character counts in a hashmap datastructure.
     * @param word The string word to iterate.
     * @return Hashmap of character -> counts.
     */
    private static Map<Character, Integer> getCharCounts(String word) {
        Map<Character, Integer> wordCounts = new HashMap<>();

        for (int i = 0; i < word.length(); i++) {
            Character character = word.charAt(i);

            // If key doesn't exist, initialise it
            if (!wordCounts.containsKey(character)) {
                wordCounts.put(character, 0);
            }

            // Increment count by 1
            wordCounts.put(character, wordCounts.get(character) + 1);
        }

        return wordCounts;
    }

    public static void main(String[] args) {     
        // Initialise character counts first
        Map<Character, Integer> charCounts = getCharCounts(String.valueOf(chars));

        for (int i = 0; i < words.length; i++) {
            Map<Character, Integer> wordCounts = getCharCounts(words[i]);

            // If Hashmaps are equal, then we have found a match
            if (wordCounts.equals(charCounts)) {
                System.out.println(words[i] + ", at index = " + i);
                break;
            }
        }
    }
}

Output:

rest, at index = 1

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.