Java 如何存储字符串的不同字符 公共类节点重复{ 静态最终整数,字符数=256; /*打印传递字符串中存在的重复项*/ 静态void printdinct(字符串str) { //创建一个大小为256且数量为的数组 //里面的每个字 int[]计数=新的int[字符数]; /*使用字符频率对数组进行计数*/ int i; 对于(i=0;i

Java 如何存储字符串的不同字符 公共类节点重复{ 静态最终整数,字符数=256; /*打印传递字符串中存在的重复项*/ 静态void printdinct(字符串str) { //创建一个大小为256且数量为的数组 //里面的每个字 int[]计数=新的int[字符数]; /*使用字符频率对数组进行计数*/ int i; 对于(i=0;i,java,string,Java,String,我试图将不同的字符存储在字符串中。问题是我的代码删除了所有重复的元素。例如: 输入:SHINCHAN 实际输出:SICA 所需输出:SHINCA(我想将每个元素存储一次) 您可以使用LinkedHashSet实现相同的功能: public class NoDuplicate { static final int NO_OF_CHARS = 256; /* Print duplicates present in the passed string */

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

输入:
SHINCHAN

实际输出:
SICA

所需输出:
SHINCA
(我想将每个元素存储一次)


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

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); 
    } 
} 

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

str.chars().mapToObj(e -> Character.toString((char) e))
           .distinct()
           .forEach(System.out::println);
static void printdinct(字符串str){
字符串s=“”;
Set origSet=new LinkedHashSet();
对于(int i=0;i

此代码将存储您的字符串

@ShivamSharma-为什么不将算法更改为逐字母在字符串上运行并保存它呢。在向字符串添加字母之前,请检查该字母是否已存在。如果没有,请添加它。如果有-don't.Comment
//打印计数大于0的字符:这将是正确的做法。实际代码
if(count[(int)str.charAt(i)]==1).
不会这样做。你实际上正确地计算了字符数;问题都在输出端。谢谢,@Nicholas,但是输出以集合的形式返回,而不是打印集合,您可以对其进行迭代,然后打印元素:)类似于这样的操作:
origSet.forEach(System.out::println)我可以将其存储在某个字符串变量中吗@Nicholas K1)因为Set没有get方法,所以不能执行
origSet。get(i)
2)使用StringBuilder而不是String。因此,现在在向集合添加元素时,您可以执行以下操作:
Set origSet=new LinkedHashSet();StringBuilder concat=新的StringBuilder();对于(inti=0;i
这将起作用,因为
add()
返回一个
布尔值
str.chars().mapToObj(e -> Character.toString((char) e))
           .distinct()
           .forEach(System.out::println);
/* 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));
        }
    }
}
/* 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);
        }
    }
}
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);
    }