不使用字符串函数从java中的字符串中删除重复的字符

时间:2015-10-23 09:33:26

标签: java string

任何人都可以建议我如何在java中删除字符串中的重复字符,而不使用字符串函数。

据我所知,我们将给定的字符串转换为字符数组,然后我们可以使用TreeSet删除重复项。但ToCharArray又是一个字符串函数。

5 个答案:

答案 0 :(得分:1)

您可以创建一个Scanner来读取该字符串,就好像您通过流读取它一样。

    String input = "Hello World";
    Scanner scanner = new Scanner(input);
    scanner.useDelimiter("");
    while(scanner.hasNext()) {
        System.out.println(scanner.next());
    }

收率:

H
e
l
l
o

W
o
r
l
d

答案 1 :(得分:1)

所有其他答案都是通过使用其他类(如StringBuilder或Scanner)绕过String方法的使用。但是,它们仍然使用String方法,尽管是间接的,因为这些其他类本身使用String方法。我的解决方案有点顽皮"和jdk特定的,但至少它根本不使用任何String方法:

    String s = "hello";
    Class<String> c = (Class<String>) Class.forName("java.lang.String");
    Field f = c.getDeclaredField("value");
    f.setAccessible(true);
    char[] array = (char[]) f.get(s);

...然后完全在阵列上进行处理。

请参阅,没有使用String方法! ; - )

答案 2 :(得分:0)

charAt和length来自Interface CharSequence

所以请使用StringBuilder并使用它们的方法实现。

StringBuilder sb = new StringBuilder("My My My");

并使用

sb.length()

结合使用
sb.chartAt(index);

你可以迭代你的stringbuilder识别重复项,并使用

删除它们
sb.deleteCharAt(index_of_char_to_delete);

答案 3 :(得分:0)

这个怎么样?

    String str = "eyyigwdqweqe";
    StringBuilder builder = new StringBuilder(str);
    HashSet<String> mySet = new HashSet<String>();

    for(int i = 0; i<builder.length();i++)
        mySet.add(builder.charAt(i)+"");
    System.out.println(mySet);

答案 4 :(得分:0)

public class RemoveDuplicates {

    public static void main(String[] args) {

        String input = new String("Geeksforgeeks");
        String output = new String();
        boolean isPresent;

        if (input.length()==0){
            System.out.println("Input String Empty. Program Terminated");
        }
        else {
            //read each character of input string 
            for (int i = 0; i < input.length(); i++) {
                isPresent=false;

                //read through entire output string 
                for (int j = 0; j < output.length(); j++) {

                    //check if character exists in output string then set flag
                    if (Character.toLowerCase(input.charAt(i)) == Character.toLowerCase(output.charAt(j))) {
                        isPresent = true;
                        break;
                    }
                }//for              
                //if flag is false means character is not dduplicated then add to output string
                if (!isPresent) {
                    output += input.charAt(i);
                }//if               
        }//end of input string loop         
        System.out.println("Original input : "+input);
        System.out.println("Final output   : "+output);
        }
    }//main
}//class