我是Java新手。今天我试图做一个Java程序来打印一个字符串中的重复字符,其中输出也不应该有重复。 例如,如果字符串输入为:“aabacdceefeg” 输出不应该有重复的字符 即输出应为:“ace”,不应该“aacee”
public class programclass {
private static Scanner s;
public static void main(String [] args) {
String n, a[];
int i,j,l;
System.out.println("Enter the string: ");
s= new Scanner(System.in);
n=s.nextLine();
a=n.split("");
l = a.length;
for(i=0; i<l; i++){
for(j=i+1; j<l; j++){
if(a[i].equals(a[j])) {
System.out.println(a[i]);
}
}
}
}
}
请帮我解决这个问题。 提前谢谢。
答案 0 :(得分:1)
这是一个解决方案,对字符串进行排序,然后使用正则表达式删除重复项:
String string = "aabacdceefeg";
char[] chars = string.toCharArray();
Arrays.sort(chars);
String sorted = new String(chars);
String result = sorted.replaceAll("(.)\\1+", "$1");
答案 1 :(得分:0)
我认为这里更好的策略是将每个使用过的字符保存在一个集合中,然后检查字母是否在集合中。
public class programclass {
private static Scanner s;
public static void main(String [] args) {
String n, a[];
int i,j,k,l;
Set<String> set = new HashSet<String>();
System.out.println("Enter the string: ");
s= new Scanner(System.in);
n=s.nextLine();
a=n.split("");
l = a.length;
for(i=0; i<l; i++){
if(set.contains(a[i])){
System.out.println(a[i]);
}
set.add(a[i]);
}
} }
如果您只想重复打印一次字符,请添加另一组以跟踪已打印的字母。
答案 2 :(得分:0)
您可能希望使用Set来完成工作。 你走了:
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Scanner;
import java.util.Set;
public class Sample {
private static Scanner s;
public static void main(String[] args) {
String n, a[];
int i, j, k, l;
System.out.println("Enter the string: ");
s = new Scanner(System.in);
n = s.nextLine();
a = n.split("");
l = a.length;
Set<String> noDupes = new LinkedHashSet<>();
StringBuilder sb = new StringBuilder();
for (i = 0; i < l; i++) {
noDupes.add(a[i]);
}
for (Iterator<String> it = noDupes.iterator(); it.hasNext();) {
String f = it.next();
sb.append(f);
}
System.out.println(sb.toString());
}
}