it-swarm.com.de

Java: Ein eindeutiges Zeichen in einer Zeichenfolge drucken

Ich schreibe ein Programm, das das eindeutige Zeichen in einer Zeichenfolge (durch einen Scanner eingegeben) druckt. Ich habe eine Methode erstellt, mit der versucht wird, dies zu erreichen, aber ich bekomme immer wieder Zeichen, die keine Wiederholungen sind, anstatt eines (oder mehrerer) Zeichen, die für die Zeichenfolge eindeutig sind. Ich möchte nur die eindeutigen Buchstaben.

Hier ist mein Code:

import Java.util.Scanner;
public class Sameness{
   public static void main (String[]args){
   Scanner kb = new Scanner (System.in); 
     String Word = "";

     System.out.println("Enter a Word: ");
     Word = kb.nextLine();

     uniqueCharacters(Word); 
}

    public static void uniqueCharacters(String test){
      String temp = "";
         for (int i = 0; i < test.length(); i++){
            if (temp.indexOf(test.charAt(i)) == - 1){
               temp = temp + test.charAt(i);
         }
      }

    System.out.println(temp + " ");

   }
}            

Und hier ist eine Beispielausgabe mit dem obigen Code:

Enter a Word: 
nreena
nrea 

Die erwartete Ausgabe wäre: ra

5
Dextra

Basierend auf Ihrer gewünschten Ausgabe müssen Sie ein Zeichen ersetzen, das anfangs bereits hinzugefügt wurde, wenn es später dupliziert wurde.

public static void uniqueCharacters(String test){
    String temp = "";
    for (int i = 0; i < test.length(); i++){
        char current = test.charAt(i);
        if (temp.indexOf(current) < 0){
            temp = temp + current;
        } else {
            temp = temp.replace(String.valueOf(current), "");
        }
    }

    System.out.println(temp + " ");

}
6
lmiguelvargasf

Wie wäre es mit dem KISS Prinzip:

public static void uniqueCharacters(String test) {
    System.out.println(test.chars().distinct().mapToObj(c -> String.valueOf((char)c)).collect(Collectors.joining()));
}
2
Bohemian

Um eine Lösung zu finden, würde ich Ihnen jedoch empfehlen, eine bessere Datenstruktur zu verwenden und nicht nur eine Zeichenkette. Sie können Ihre Logik jedoch einfach so ändern, dass bereits vorhandene Duplikate mithilfe einer else wie folgt gelöscht werden:

public static void uniqueCharacters(String test) {
        String temp = "";
        for (int i = 0; i < test.length(); i++) {
            char ch = test.charAt(i);
            if (temp.indexOf(ch) == -1) {
                temp = temp + ch;
            } else {
                temp.replace(String.valueOf(ch),""); // added this to your existing code
            }
        }

        System.out.println(temp + " ");

    }
2
nullpointer

Die akzeptierte Antwort besteht beispielsweise nicht den gesamten Testfall

eingabe -"aaabcdd"

gewünschte Ausgabe -"bc"
aber die akzeptierte Antwort wird -abc geben

weil der Charakter eine ungerade Anzahl von Malen anwesend ist.

Hier habe ich ConcurrentHasMap verwendet, um Zeichen und die Anzahl der Vorkommen von Zeichen zu speichern, und dann das Zeichen entfernt, wenn das Vorkommen mehr als einmal ist.

import Java.util.concurrent.ConcurrentHashMap;

public class RemoveConductive {

    public static void main(String[] args) {

        String s="aabcddkkbghff";

        String[] cvrtar=s.trim().split("");

        ConcurrentHashMap<String,Integer> hm=new ConcurrentHashMap<>();
        for(int i=0;i<cvrtar.length;i++){
            if(!hm.containsKey(cvrtar[i])){
                hm.put(cvrtar[i],1);
            }
            else{
                 hm.put(cvrtar[i],hm.get(cvrtar[i])+1);
            }
        }
        for(String ele:hm.keySet()){
            if(hm.get(ele)>1){
                hm.remove(ele);
            }
        }
        for(String key:hm.keySet()){
            System.out.print(key);
        }
    }  
}
2
rajesh
public static String input = "10 5 5 10 6 6 2 3 1 3 4 5 3";

public static void uniqueValue (String numbers) {
    String [] str = input.split(" ");
    Set <String> unique = new HashSet <String> (Arrays.asList(str));
    System.out.println(unique);

    for (String value:unique) {
        int count = 0;
        for ( int i= 0; i<str.length; i++) {
            if (value.equals(str[i])) {
                count++;
            }
        }
        System.out.println(value+"\t"+count);
    }
}
public static void main(String [] args) {
    uniqueValue(input);
}
1
Dana

Dies ist eine Interviewfrage. Finden Sie alle eindeutigen Zeichen einer Zeichenfolge heraus. Hier ist die vollständige Lösung. Der Code selbst ist selbsterklärend.

public class Test12 {
    public static void main(String[] args) {
        String a = "ProtijayiGiniGina";

        allunique(a);
    }

    private static void allunique(String a) {
        int[] count = new int[256];// taking count of characters
        for (int i = 0; i < a.length(); i++) {
            char ch = a.charAt(i);
            count[ch]++;
        }

        for (int i = 0; i < a.length(); i++) {
            char chh = a.charAt(i);
            // character which has arrived only one time in the string will be printed out
            if (count[chh] == 1) {
                System.out.println("index => " + i + " and unique character => " + a.charAt(i));

            }
        }

    }// unique

}

In Python:

def firstUniqChar(a):
    count = [0] *256
    for i in a: count[ord(i)] += 1
    element = ""

    for item in a:
        if (count[ord(item)] == 1):
            element = item;
            break;
    return element        


a = "GiniGinaProtijayi";
print(firstUniqChar(a)) # output is P
1
Soudipta Dutta
public class UniqueCharactersInString {


 public static void main(String []args){

    String input = "aabbcc";
    String output = uniqueString(input);

    System.out.println(output);
 }

 public static String uniqueString(String s){
     HashSet<Character> uniques = new HashSet<>();
     uniques.add(s.charAt(0));
     String out = "";
     out += s.charAt(0);

     for(int i =1; i < s.length(); i++){
         if(!uniques.contains(s.charAt(i))){
             uniques.add(s.charAt(i));
             out += s.charAt(i);
         }
     }
     return out;
 }
}

Was wären die Unzulänglichkeiten dieser Antwort? Wie ist es mit anderen Antworten zu vergleichen?

0
Zulu

Ich benutze diesen Weg, um einzigartige Zeichen zu erhalten

for (int i=0; i< input.length();i++)
    if(input.indexOf(input.charAt(i)) == input.lastIndexOf(input.charAt(i)))
        System.out.println(input.charAt(i) + "  is unique");
0
Parviz Makari
import Java.util.*;
import Java.lang.*;
class Demo
{
public static void main(String[] args)
{

Scanner sc=new Scanner(System.in);
System.out.println("Enter String");
String s1=sc.nextLine();
 try{
HashSet<Object> h=new HashSet<Object>();
for(int i=0;i<s1.length();i++)
{
h.add(s1.charAt(i));
}
Iterator<Object> itr=h.iterator();
  while(itr.hasNext()){
   System.out.println(itr.next());
    }
    }
    catch(Exception e)
    {
    System.out.println("error");
    }
}
}
0
shanbhagsv

Je nach gewünschter Ausgabe können Sie jedes bereits vorhandene Zeichen durch ein Leerzeichen ersetzen.

public static void uniqueCharacters(String test){
  String temp = "";
  for(int i = 0; i < test.length(); i++){
      if (temp.indexOf(test.charAt(i)) == - 1){
         temp = temp + test.charAt(i);
      } else {
         temp.replace(String.valueOf(temp.charAt(i)), "");
      }
 }

System.out.println(temp + " ");

}

0
BHARAT Bhasin

Wenn Sie keinen zusätzlichen Speicherplatz verwenden möchten:

    String abc="developer";

    System.out.println("The unique characters are-");

    for(int i=0;i<abc.length();i++)
    {
        for(int j=i+1;j<abc.length();j++)
        {
            if(abc.charAt(i)==abc.charAt(j))
                abc=abc.replace(String.valueOf(abc.charAt(j))," ");
        }
    }   
    System.out.println(abc);

Zeitkomplexität O (n ^ 2) und kein Platz.

0
Anand Chouksey
public void uniq(String inputString) {
    String result = "";
    int inputStringLen = inputStr.length();
    int[] repeatedCharacters = new int[inputStringLen];
    char inputTmpChar;
    char tmpChar;

    for (int i = 0; i < inputStringLen; i++) {
        inputTmpChar = inputStr.charAt(i);
        for (int j = 0; j < inputStringLen; j++) {
            tmpChar = inputStr.charAt(j);
            if (inputTmpChar == tmpChar)
                repeatedCharacters[i]++;
        }
    }

    for (int k = 0; k < inputStringLen; k++) { 
        inputTmpChar = inputStr.charAt(k);
        if (repeatedCharacters[k] == 1)
            result = result + inputTmpChar + " ";
    }

    System.out.println ("Unique characters: " + result);
}

In der ersten for-Schleife zähle ich, wie oft sich das Zeichen in der Zeichenfolge wiederholt. 
In der zweiten Zeile suche ich nach Zeichen, die sich einmal wiederholen. 

0
ptaq

Ich würde alle Zeichen der Zeichenfolge in einem Array speichern, das Sie durchlaufen, um zu prüfen, ob die aktuellen Zeichen dort mehr als einmal vorkommen. Wenn dies nicht der Fall ist, fügen Sie es zu Temp hinzu.

public static void uniqueCharacters(String test) {
    String temp = "";
    char[] array = test.toCharArray();
    int count; //keep track of how many times the character exists in the string

    outerloop: for (int i = 0; i < test.length(); i++) {
        count = 0; //reset the count for every new letter
        for(int j = 0; j < array.length; j++) {
            if(test.charAt(i) == array[j])
                count++;
            if(count == 2){
                count = 0;
                continue outerloop; //move on to the next letter in the string; this will skip the next two lines below
            }
        }
        temp += test.charAt(i);
        System.out.println("Adding.");
    }    
    System.out.println(temp);
}

Ich habe Kommentare für einige Details hinzugefügt.

0
Gendarme

Dieser String-Algorithmus wird verwendet, um eindeutige Zeichen in einem String zu drucken. Er wird in O(n) Laufzeit ausgeführt, wobei n die Länge des Strings ist. Er unterstützt nur ASCII -Zeichen.

static String printUniqChar(String s) {
    StringBuilder buildUniq = new StringBuilder();
    boolean[] uniqCheck = new boolean[128];
    for (int i = 0; i < s.length(); i++) {
        if (!uniqCheck[s.charAt(i)]) {
            uniqCheck[s.charAt(i)] = true;
            if (uniqCheck[s.charAt(i)])
                buildUniq.append(s.charAt(i));
        }
    }
0
RathanaKumar