比较字符串/数组中的两个字符,看看它们是否相同

问题描述 投票:0回答:1

我正在尝试创建一个数组并删除除空格(“”)之外的重复项。我在网上看到了一些方法,但我正在尝试不复制。我尝试了很多方法,但我就是不明白为什么我的方法不起作用。

这是我尝试过的:

在第一个方法中,方法是接收输入,调用函数,创建数组列表,遍历字符串,同时将每个字符添加到数组列表中,第二次遍历列表以将每个字符与第一个索引处的字符进行比较,检查它们是否相等,然后将它们从数组列表中删除

问题似乎是“检查它们是否相等,然后将它们从数组列表中删除”:

if(character.get(i).equals(character.get(k))) {
    character.remove(arr.charAt(i));                
}

第二个

for(int k = 0;k < characters.length;k++) {
    if(characters[i]==characters[k]) {
        System.out.print(character);                        
        character.remove(characters[i]);                    
    }   
import java.util.*;

public class NoRepeats {
    
    public static void main(String args[]) {
        System.out.print("Please enter a phrase: ");
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        
        char[] characters = chars(input);
    }
    
    public static char[] chars(String arr) {
        ArrayList<Character> character = new ArrayList<Character>();

        for(int i = 0; i<arr.length();i++) {
            character.add(arr.charAt(i));           

            for(int k = 1; k<arr.length();k++) {
                if(character.get(i).equals(character.get(k))) {
                    character.remove(arr.charAt(i));                
                }
            }
        }
        System.out.print(character);
        return null;
    }
}
import java.util.*;

public class NoRepeats {
    
    public static void main(String args[]) {
        System.out.print("Please enter a phrase: ");
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        //receive input
        char[] characters = chars(input);
        //call function
    }
    
    public static char[] chars(String arr) {
        ArrayList<Character> character = new ArrayList<Character>();
        //create an empty arraylist
        char[] characters = arr.toCharArray();
        
        for(int j = 0; j<characters.length;j++) {
            character.add(characters[j]);
        }
       
        for(int i = 0; i<characters.length;i++) {
            /*traverse through the orignal array adding a character to 
            the empty array list each time*/            
                for(int k = 0;k < characters.length;k++) {
                    if(characters[i]==characters[k]) {
                    System.out.print(character);                        
                    character.remove(characters[i]);                    
                }                   
            }
        }
        return null;
    }
}

预期输入:

“And I think to myself: what a wonderful world!”

预期输出:

And I thk o myself: w ru !

第一个产生此错误:

线程“main”中的异常 java.lang.IndexOutOfBoundsException:索引 1 超出长度 1 的范围 在 java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) 在 java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) 在 java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266) 在 java.base/java.util.Objects.checkIndex(Objects.java:359) 在 java.base/java.util.ArrayList.get(ArrayList.java:427) 在 NoRepeats.chars(NoRepeats.java:20) 在NoRepeats.main(NoRepeats.java:10)

第二个产生此错误:

“线程“main”中的异常 java.lang.IndexOutOfBoundsException:索引 118 超出长度 2 的范围 在 java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) 在 java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) 在 java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266) 在 java.base/java.util.Objects.checkIndex(Objects.java:359) 在 java.base/java.util.ArrayList.remove(ArrayList.java:504) 在 NoRepeats.chars(NoRepeats.java:33) 在 NoRepeats.main(NoRepeats.java:11) ”

java arrays arraylist non-repetitive
1个回答
0
投票

首先需要用文字(或伪代码)来表达你的算法。像这样的东西: 问题:从字符串中删除除空格之外的重复字符。 解决方案(伪代码):

output_string = ""
used_chars = ""
for (c : input_string) {
  if (c == ' ') output_string += c;
  else if (!used_chars.contains(c)) {
    output_string += c;
    used_chars += c;
  }
}
print(output_string)

现在您可以用任何您想要的语言来实现。

© www.soinside.com 2019 - 2024. All rights reserved.