当前位置: 代码迷 >> java >> 如何存储字符串的不同字符
  详细解决方案

如何存储字符串的不同字符

热度:77   发布时间:2023-07-25 19:39:00.0
public class NoDuplicate { 
    static final int NO_OF_CHARS = 256; 

    /* Print duplicates present in the passed string */
    static void printDistinct(String str) 
    { 
        // Create an array of size 256 and count of 
        // every character in it 
        int[] count = new int[NO_OF_CHARS]; 

        /* Count array with frequency of characters */
        int i; 
        for (i = 0; i < str.length(); i++) 
            if(str.charAt(i)!=' ') 
                count[(int)str.charAt(i)]++; 
        int n = i; 

        // Print characters having count more than 0 
        for (i = 0; i < n; i++) 
            if (count[(int)str.charAt(i)] == 1) 
                System.out.print(str.charAt(i)); 
    } 

    /* Driver program*/
    public static void main(String args[]) 
    { 
        String str = "SHINCHAN"; 
        printDistinct(str); 
    } 
} 

我试图将不同的字符存储在一个字符串中。 问题是我的代码删除了所有重复的元素。 例:

输入: SHINCHAN

实际产量: SICA

期望的输出: SHINCA (我想存储每个元素一次)

您可以使用LinkedHashSet来实现相同的功能:

static void printDistinct(String str) {
    Set<Character> origSet = new LinkedHashSet<Character>();
    StringBuilder concat = new StringBuilder();
    for (int i = 0; i < str.length(); i++) {
        if (origSet.add(str.charAt(i))) {
            concat.append(str.charAt(i));
        }
    }
    System.out.println(concat);
}

如果你使用的是java-8,你可以这样做:

str.chars().mapToObj(e -> Character.toString((char) e))
           .distinct()
           .forEach(System.out::println);
static void printDistinct(String str) {
        String s="";
        Set<Character> origSet = new LinkedHashSet<Character>();
        for (int i = 0; i < str.length(); i++) {
            origSet.add(str.charAt(i));
        }
        System.out.println(origSet);
        for(char c:origSet) {
            s=s+c;
        }
        System.out.println(s);
    }

此代码将存储您的字符串

最好的办法是在第一个循环中打印字符。 第一次看到它们时打印它们。 然后你可以完全摆脱第二个循环。

/* Count array with frequency of characters */
int i; 
for (i = 0; i < str.length(); i++) {
    if (str.charAt(i)!=' ') {
        count[(int)str.charAt(i)]++; 
        if (count[(int)str.charAt(i)] == 1) {
            System.out.print(str.charAt(i));
        }
    }
}

顺便说一下,将str.charAt(i)保存在变量中会使代码读起来更好一些。

/* Count array with frequency of characters */
int i; 
for (i = 0; i < str.length(); i++) {
    char ch = str.charAt(i);
    if (ch != ' ') {
        count[(int) ch]++; 
        if (count[(int) ch] == 1) {
            System.out.print(ch);
        }
    }
}
  相关解决方案