Java:仅打印字符串中的唯一字符
我正在编写一个程序,只显示用户通过扫描仪输入的字符串中的唯一字符 例如,如果用户输入以下行Java:仅打印字符串中的唯一字符,java,Java,我正在编写一个程序,只显示用户通过扫描仪输入的字符串中的唯一字符 例如,如果用户输入以下行 eleven seven 那么我的预期输出将是 lvn svn 这是我的密码: import java.util.Arrays; import java.util.Scanner; public class unique_element { public static void main(String[] args) { Scanner sc= new Scanner(Sys
eleven seven
那么我的预期输出将是
lvn svn
这是我的密码:
import java.util.Arrays;
import java.util.Scanner;
public class unique_element {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
String str = sc.nextLine();
char value = 0;
String str1[] = str.split(" ");
for (int k=0;k<str1.length;k++){
char string[] = str1[k].toLowerCase().toCharArray();
String temp = "";
for(int i=0;i<string.length;i++){
char current = string[i];
if(temp.indexOf(current)<0){
temp = temp + current;
}else{
temp = temp.replace(String.valueOf(current), "");
}
}
System.out.print(temp+" ");
}
}
}
首先创建一个哈希映射并添加字符串中的每个字符。 然后在相同字符出现时增加int值
map.put(key, map.get(key) + 1);
应该有用
同时检查此项:使用java8和
我稍微调整一下你的解决方案。我稍微更改了字符串,这样就不必在每次迭代中都创建一个新字符串。最后,我用和给出了解决方案。但我想有一个更有效的解决办法。代码如下: 字符串内容=十一个七; String[]splittedContent=content.toLowerCase.split; 对于字符串字:splittedContent{ char[]splittedWord=word.tocharray; StringBuilder=新的StringBuilder; 对于char元素:splittedWord{ int index=word.indexOfCharacter.toString元素; int lastIndex=word.lastIndexOfCharacter.ToString元素; //仅当字符在单词中出现一次时为true 如果索引==lastIndex{ builder.appendelement; } } System.out.printbuilder.toString+; } 否则,还有另一个使用Java流API的解决方案。我使用该方法创建包含单个字符及其计数的地图。最后,我过滤唯一的单个字符并创建一个字符串。该解决方案类似于@BoraÇolakoğlu的提议: 对于字符串s:content.toLowerCase.split{ //使用单个字符创建地图及其计数 Map frequentChars=s.chars .MapToobCharacter::toString .collectCollectors.groupingByFunction.identity、Collectors.counting; //筛选唯一的单个字符并连接到字符串 String unique=frequentChars.entrySet 流动 .filterv->v.getValue==1L .mapMap.Entry::getKey .加入; System.out.printlunique; }
在Java8中,我们可以这样做
private void removeduplicatecharactersfromstring() {
String myString = "aabcd eeffff ghjkjkl";
StringBuilder builder = new StringBuilder();
System.out.println(myString);
Arrays.asList(myString.split(" "))
.forEach(s -> {
builder.append(Stream.of(s.split(""))
.distinct().collect(Collectors.joining()).concat(" "));
});
System.out.println(builder); // abcd ef ghjkl
}
我的问题得到了正确的答案:
import java.util.Arrays;
import java.util.Scanner;
public class unique_element {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
String str = sc.nextLine();
char value = 0;
String str1[] = str.split(" ");
System.out.println(Arrays.toString(str1));
for (int k=0;k<str1.length;k++){
char string[] = str1[k].toLowerCase().toCharArray();
for (int i=0;i<string.length;i++){
int count=0;
for (int j=0;j<string.length;j++){
if(i!=j){
if(string[i]==string[j]){
count++;
}
}
}
if(count==0){
System.out.print(string[i]);
}
}
System.out.print(" ");
}
}
}
您的意思是要显示只出现一次的字符?因为L V E和N是单词“十一”的唯一字符。您忘记了提问和描述您的问题。请创建映射字符ToOccurences,然后在其上迭代并打印字母,如果值==1是,我希望输出:-lvn svn但没有映射
private void removeduplicatecharactersfromstring() {
String myString = "aabcd eeffff ghjkjkl";
StringBuilder builder = new StringBuilder();
System.out.println(myString);
Arrays.asList(myString.split(" "))
.forEach(s -> {
builder.append(Stream.of(s.split(""))
.distinct().collect(Collectors.joining()).concat(" "));
});
System.out.println(builder); // abcd ef ghjkl
}
import java.util.Arrays;
import java.util.Scanner;
public class unique_element {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
String str = sc.nextLine();
char value = 0;
String str1[] = str.split(" ");
System.out.println(Arrays.toString(str1));
for (int k=0;k<str1.length;k++){
char string[] = str1[k].toLowerCase().toCharArray();
for (int i=0;i<string.length;i++){
int count=0;
for (int j=0;j<string.length;j++){
if(i!=j){
if(string[i]==string[j]){
count++;
}
}
}
if(count==0){
System.out.print(string[i]);
}
}
System.out.print(" ");
}
}
}