2017-02-15 12 views
2
import java.util.*; 
public class DuplicateCharacters { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     Scanner s = new Scanner(System.in); 
     System.out.println("Enter String: "); 
     String str = s.nextLine(); 

     for(int i=0;i<str.length()-1;i++) 
     { 
      for(int j=i+1;j<str.length();j++) 

      { 
      if(str.charAt(i)==str.charAt(j)) 
      { 

       System.out.print(str.charAt(j)); 
      } 
      } 
     } 
    } 

} 

我的代码适用于字符串包含2个重复的字符只有..如何从字符串中的Java打印一式两份字符

例如假设输入=印度它打印我 但输入aaa时,输出=一个a..it应打印一次

+0

我需要它只使用字符串如此 –

回答

0

我会开始将问题分解成两部分。首先,您需要一种方法来计算给定起始索引中给定字符的出现次数。这可能看起来像,

static int countFrom(String str, char ch, int start) { 
    int count = 0; 
    for (int i = start; i < str.length(); i++) { 
     if (str.charAt(i) == ch) { 
      count++; 
     } 
    } 
    return count; 
} 

然后你可以使用一个Set<Character>(跟踪你已经使用的字符),如

Scanner s = new Scanner(System.in); 
System.out.println("Enter String: "); 
String str = s.nextLine(); 
Set<Character> set = new HashSet<>(); 
for (int i = 0; i < str.length(); i++) { 
    char ch = str.charAt(i); 
    if (!set.contains(ch)) { 
     int count = countFrom(str, ch, i); 
     if (count > 1) { 
      System.out.print(ch); 
     } 
     set.add(ch); 
    } 
} 
System.out.println(); 

并没有Set,你可以模拟一个用String

String setString = ""; 
for (int i = 0; i < str.length(); i++) { 
    char ch = str.charAt(i); 
    if (!setString.contains(String.valueOf(ch))) { 
     int count = countFrom(str, ch, i); 
     if (count > 1) { 
      System.out.print(ch); 
     } 
     setString += ch; 
    } 
} 
+0

它的工作..谢谢 –

+2

@shraddha如果它适用于您标记为接受的答案所以问题从unanswer问题中删除列表:) –

1

企图把每一个新字读成Set<Character>。如果添加到集合返回false,然后将其添加到一组跟踪所有重复字符。下面是伪代码是:

Set<Character> uniqueChars = new HashSet<Character>(); 
Set<Character> repeats = new HashSet<Character>(); 
for(int i = 0; i < str.length() - 1; i++) { 
    if (!uniqueChars.add(str.charAt(i)) { 
     repeats.add(str.charAt(i)); 
    } 
} 

// now loop through the repeats set and print out each one. 
0

这是另一种方式来解决这个问题..

Scanner s = new Scanner(System.in); 
    System.out.println("Enter String: "); 
    String str = s.nextLine(); 

    String duplicates = ""; 

    for (int i = 0; i < str.length() - 1; i++) { 
     for (int j = i + 1; j < str.length(); j++) 

     { 
      if (str.charAt(i) == str.charAt(j)) { 

       if (!duplicates.contains(String.valueOf(str.charAt(j)))) { 
        duplicates += str.charAt(j); 
        break; 
       } 

      } 
     } 
    } 

    System.out.println(duplicates); 
0

或者考虑一个地图

String word = "aiaiiab"; 
    Map <Character, Integer> charMap = new HashMap<Character, Integer>(); 
    for (char c : word.toCharArray()) { 
     Integer count = charMap.get(new Character(c)); 
     if (count == null) { 
      charMap.put(new Character(c), 1); 
     } 
     else { 
      charMap.put(new Character(c), count.intValue() + 1); 
     } 
    } 

    for (Entry<Character, Integer> obj : charMap.entrySet()) { 

     if (obj.getValue() > 1) { 
      System.out.println(obj.getKey()); 
     } 
    } 
0
package com.java2novice.algos; 

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

public class DuplicateCharsInString { 

public void findDuplicateChars(String str){ 

    Map<Character, Integer> dupMap = new HashMap<Character, Integer>(); 
    char[] chrs = str.toCharArray(); 
    for(Character ch:chrs){ 
     if(dupMap.containsKey(ch)){ 
      dupMap.put(ch, dupMap.get(ch)+1); 
     } else { 
      dupMap.put(ch, 1); 
     } 
    } 
    Set<Character> keys = dupMap.keySet(); 
    for(Character ch:keys){ 
     if(dupMap.get(ch) > 1){ 
      System.out.println(ch+"--->"+dupMap.get(ch)); 
     } 
    } 
} 

public static void main(String a[]){ 
    DuplicateCharsInString dcs = new DuplicateCharsInString(); 
    dcs.findDuplicateChars("Java2Novice"); 
} 
} 
我一直在使用它集..