问题描述
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
(我想存储每个元素一次)
1楼
您可以使用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);
2楼
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);
}
此代码将存储您的字符串
3楼
最好的办法是在第一个循环中打印字符。 第一次看到它们时打印它们。 然后你可以完全摆脱第二个循环。
/* 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);
}
}
}