Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:仅打印字符串中的唯一字符_Java - Fatal编程技术网

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

    }

}