从字符串句子中删除重复的字母,同时保留句子中的空格

Remove duplicate letters from a string sentence while keeping the spaces from the sentence

我正在尝试将用户输入字符串变量的句子删除重复的字母,同时保留句子中的空格。例如,如果用户输入“hello my name is danny”,它将 return “Helo my nam is dn”。

为此,我已经尝试过此代码:

package noRepeats.java;

import java.util.Scanner;

public class NoRepeats {

    public static void main(String[] args) {
        
        System.out.println("Please enter a sentence:");
    
        Scanner sc = new Scanner(System.in);
        String userInput = sc.nextLine();
    
        String sentence = userInput;
        
        char[] Array = sentence.toCharArray();
        
        StringBuilder sb3 = new StringBuilder();
        for(int i=0; i<Array.length;i++) {
            boolean repeated = false;
            for(int j = i + 1; j<Array.length;j++) {
                if(Array[i]==Array[j]) {
                     repeated = true;
                     break;
                }
            }
            if(!repeated) {
                sb3.append(Array[i]);
            }
        }
        System.out.println(sb3);
    }
}

然而,这段代码并没有保留句子的空格,而且它似乎也删除了重复对中的第一个字母,但没有删除第二个。

您用来检查 repeated 的逻辑有点不正确。您需要检查您正在循环的当前字符是否存在于您到目前为止构建的字符串构建器中。这样一个角色将被允许第一次而不是第二次。 对于space这件事,这只是一个简单的条件,你可以添加。

for (int i = 0; i < array.length; i++) {
    if(array[i] == ' ') {
        sb3.append(array[i]);
        continue;
    }
    boolean repeated = sb3.indexOf(String.valueOf(array[i])) >= 0;
    if (!repeated) {
        sb3.append(array[i]);
    }
}

此外,我想指出您的变量名不应该以大写字母开头,因此变量 Array 应该是 array.