Nirmal
Nirmal

Reputation: 111

[Java]Find duplicate characters in a string without hashmap and set

I have written a Java program to find duplicate characters in a string without Hashmap and set.

Below is the program,

package practice;

public class Duplicate {

    public static void main(String[] args) {

        String src= "abcad";

        char[] srcChar= src.toLowerCase().toCharArray();

        int len=srcChar.length;
        int j=0;
        boolean flag=false;
        char ch;

        //      System.out.println("Length of the String is "+len1);
        //      System.out.println("Length of the character array is "+len);


        int k=0;

        for(int i=0;i<len;i++)
        {
            //          System.out.println("i-----> "+i + " and character is "+srcChar[i]);
            for(j=0;j<len;j++)
            {
                //              System.out.println("j-----> "+j + " and character is "+srcChar[j]);
                if(srcChar[i]==srcChar[j])
                {
                    k++;
                }
            }
            if(k>1)
            {
                if(srcChar[i]>1)
                {
                    System.out.println("This character "+srcChar[i]+" has repeated "+k+ " time");
                }
                else
                {
                    System.out.println("There are no characters repeated in the given string");
                }
            }
            k=0;
        }
    }
}

Output here is:

This character a has repeated 2 time
This character a has repeated 2 time

Here, I want the output like This character a has repeated 2 time

i.e. not repeating the output twice. Since the character "a" is repeated twice, the output is also repeated twice.

kindly help me to get the output once instead of twice.

Thank you,

Upvotes: 0

Views: 14027

Answers (7)

Sandip
Sandip

Reputation: 21

private static void duplicateChar(String str){
        char[] arr1 = str.toUpperCase().toCharArray();
        int length = str.length();
        int count = 1;
        String s = "";
        char c1 = '\u0000';

        for(int i=0;i<length;i++){
            count = 1;
            for(int j=i+1;j<length;j++){
                if(arr1[i] == arr1[j]){
                    count++;
                    c1 = arr1[i];
                }
                if(j == (length-1) && c1 != '\u0000' && !s.contains(String.valueOf(c1))){
                    s = s+" "+String.valueOf(c1)+"  No of times:  "+count+"\n";
                }
            }
        }
        System.out.println("\nDuplicate char are:\n"+s);
    }

Upvotes: 2

Sambasiva Rao Aakula
Sambasiva Rao Aakula

Reputation: 11

You can also solve this problem with this code like :

public static void main(String[] args) {

    String src = "abcad";

    char[] srcChar = src.toLowerCase().toCharArray();

    int len = srcChar.length;
    int j = 0;
    boolean flag = false;
    char ch;

    // System.out.println("Length of the String is "+len1);
    // System.out.println("Length of the character array is "+len);

    int k = 0;

    for (int i = 0; i < len; i++) {
        // System.out.println("i-----> "+i + " and character is "+srcChar[i]);
        for (j = 0 + i; j < len; j++) {
            // System.out.println("j-----> "+j + " and character is "+srcChar[j]);
            if (srcChar[i] == srcChar[j]) {
                k++;
            }
        }
        if (k > 1) {
            if (srcChar[i] > 1) {
                System.out.println("This character " + srcChar[i] + " has repeated " + k + " time");
            } else {
                System.out.println("There are no characters repeated in the given string");
            }
        }
        k = 0;
    }
}

just we need to start the inner loop with j=0+i ; for (j = 0 + i; j < len; j++)

This will you can observe above code;

Upvotes: 0

shashigura
shashigura

Reputation: 153

   char[] array=value.toCharArray();

   int count=0;

   char ch;
    for(int i=0;i<array.length-1;i++)
    {
        ch=array[i];
        count=1;
        if(ch!='#'){

            for(int j=i+1;j<array.length;j++)
            {
                if(ch==array[j]){
                    count++;
                    array[j]='#';
                }

            }
            if(count>1)
            {
                System.out.println("char is " + ch + "count"  +  count);
            }
        }


    }

Upvotes: 0

jagdish khetre
jagdish khetre

Reputation: 1421

class PrintDuplicateCharacter 
{
    public static void main(String[] args) 
    {   

        String str = "HelloJava";
        char[] ch = str.toCharArray();
        int i=0,j=0;
        for(i=0;i<ch.length;i++)
        {
            int count = 0 ;
            for( j = i+1;j<ch.length;j++)
            {//      4          6 , 8 , 10
                if(ch[i] == ch[j] )                                           
                {
                    count++;
                }
            }
            if(count != 0)           
            {
                System.out.print(str.charAt(i) + " Occured " + count + " time");
            }


        }



    }
}

Upvotes: 2

Johann
Johann

Reputation: 187

Imports:

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

Code:

public static void main(String args[]) {
    String input = "abcad"; // Input value
    char[] chars = input.toLowerCase().toCharArray(); // Creates ArrayList
                                                        // of all characters
                                                        // in the String
    List<Character> charR = new ArrayList<>(); // Creates a List used to
                                                // saving the Characters it
                                                // has saved
    List<Integer> valR = new ArrayList<>(); // Creates a List that will
                                            // store how many times a
                                            // character is repeated
    for (int i = 0; i < chars.length; i++) { // Loop through items in the
                                                // ArrayList
        char c = chars[i]; // Create Character value containing the value of
                            // the item at the "i" index of the ArrayList
        if (charR.contains(c)) { // If the List contains item...
            for (int i2 = 0; i2 < charR.size(); i2++) { // Loop through its
                                                        // items
                if (charR.get(i2).equals(c)) { // If you find a match...
                    valR.set(i2, valR.get(i2) + 1); // Increase repeated
                                                    // value by 1
                    i2 = charR.size(); // Stop loop
                } else { // Else...
                    i2++; // Increase index by 1
                }
            }
        } else { // Else...
            charR.add(c); // Add the Character to the List
            valR.add(1); // Add the value 1 to the List (Meaning that the
                            // Character repeated once)
        }
    }
    for (int i = 0; i < charR.size(); i++) { // Loop through all the items
                                                // in the List
        System.out.println("'" + charR.get(i) + "' : " + valR.get(i)); // Display
                                                                        // what
                                                                        // the
                                                                        // character
                                                                        // is
                                                                        // and
                                                                        // how
                                                                        // many
                                                                        // times
                                                                        // it
                                                                        // was
                                                                        // repeated
    }
}

Output:

'a' : 2
'b' : 1
'c' : 1
'd' : 1

Upvotes: 0

slawekpl
slawekpl

Reputation: 315

All you need to fix is to start the second loop from i instead of 0.

for (int i = 0; i < len; i++) {
    for (j = i; j < len; j++) {
        ...
    }
    ...
}

Upvotes: 0

fstam
fstam

Reputation: 699

You can make a 2 dimensional array, 2 wide, the source strings height. In this array you store a character when it gets replaced and add one to the amount of times it has been replaced.

Something like(I don't know if these counters are correct):

replacements[j][0] = charAt(j);
replacements[j][1] += 1;

You would have to check if the character you are replacing already exists in this array and you can only print elements of the array if they aren't null.

You print this after the original loop.

Upvotes: 0

Related Questions