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

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

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

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

java string
6个回答
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
投票

所有其他答案都通过使用其他类(例如 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 方法! ;-)


0
投票

charAt 和 length 来自接口 CharSequence

因此,请使用 StringBuilder 并使用它的这些方法的实现。

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

并使用

sb.length()

结合

sb.chartAt(index);

您可以迭代字符串构建器来识别重复项,并使用删除它们

sb.deleteCharAt(index_of_char_to_delete);

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);

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

0
投票

您可以使用 slice() 函数删除字符串左侧的字符。

var string='测试自动化';

var stringfinal=string.slice(4); cy.log(stringfinal)

输出:自动化

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