Java 只将每个字母放入一个字符串中一次

Java 只将每个字母放入一个字符串中一次,java,char,Java,Char,我正在为Horspool的算法编写Java程序,但遇到了一些麻烦。我试图创建一个字符数组,将每个字母都保存在一个字符串中,但我不想要重复的字母。现在这是我的代码: public static void main(String[] args) { Scanner scanIn = new Scanner (System.in); int count = 0; int count2 = 0; int inc = 0; //The text to se

我正在为Horspool的算法编写Java程序,但遇到了一些麻烦。我试图创建一个字符数组,将每个字母都保存在一个字符串中,但我不想要重复的字母。现在这是我的代码:

public static void main(String[] args) 
{
    Scanner scanIn = new Scanner (System.in);

    int count = 0;

    int count2 = 0;

    int inc = 0;

    //The text to search for the phrase in
    String t = "";

    //The phrase/pattern to search for
    String p = "";

    System.out.println(" ");
    System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    System.out.println("Harspool's Algorithm: ");
    System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    System.out.println(" ");
    System.out.println("Please enter the full text: ");
    t = scanIn.nextLine();
    System.out.println("Please enter the pattern to search for: ");
    p = scanIn.nextLine();

    char[] text = new char[t.length()];
    char[] pattern = new char[p.length()];
    char[] alphabet = new char[t.length()];

    for (int i = 0; i < alphabet.length; i++)
    {
        alphabet[i] = ' ';
    }


    for (int i = 0; i < text.length; i++)
    {
        text[i] = t.charAt(i);
    }

    for (int i = 0; i < pattern.length; i++)
    {
        pattern[i] = p.charAt(i);
    }

    while (inc < text.length)
    {
        for (int j = 0; j < text.length; j++)
        {
            if (text[inc] != alphabet[j])
            {
                count++;
            }
            if (count == p.length() - 1 && count2 < text.length)
            {
                alphabet[count2] = text[inc];
                count2++;
                count = 0;
                inc++;
            }
        }
    }

    for (int i = 0; i < alphabet.length; i++)
    {
        System.out.print(alphabet[i]);
    }
}
publicstaticvoidmain(字符串[]args)
{
Scanner scanIn=新扫描仪(System.in);
整数计数=0;
int count2=0;
int inc=0;
//要在其中搜索短语的文本
字符串t=“”;
//要搜索的短语/模式
字符串p=“”;
System.out.println(“”);
System.out.println(“~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~”;
System.out.println(“Harspool算法:”);
System.out.println(“~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~”;
System.out.println(“”);
System.out.println(“请输入全文:”);
t=scanIn.nextLine();
System.out.println(“请输入要搜索的模式:”);
p=scanIn.nextLine();
char[]text=新字符[t.length()];
char[]模式=新字符[p.length()];
字符[]字母表=新字符[t.长度()];
for(int i=0;i

我相信问题出在while循环中,但我不知道到底出了什么问题。现在,它将打印传入的整个字符串,而每个字母只打印一次。有人能帮忙吗?

不要计算每个字符的出现次数,而是使用
Set
。一个集合包含唯一的元素,这样就不会有重复的元素


您还可以通过执行mySet.toArray(新字符串[mySet.size()]),将
集合
转换为数组
或只是
mySet.toArray(新字符串[0])

使用
设置
而不是计算每个字符的出现次数。一个集合包含唯一的元素,这样就不会有重复的元素


您还可以通过执行mySet.toArray(新字符串[mySet.size()]),将
集合
转换为数组或只是
mySet.toArray(新字符串[0])

您的代码不容易阅读。您可以考虑使用下面的算法。

int ccount[256];
int ii;
for(ii=0;ii<256;ii++) ccount[ii]=0;
for (ii = 0; ii < text.length; ii++)
{
    ccount[t.charAt(i)%256]++;
}
for (ii = 0; ii<256; ii++) {
    if(ccount[ii]>0) System.out.printf("%c", ii);
}
int账户[256];
int ii;

对于(ii=0;II

),您的代码不容易阅读。您可以考虑使用下面的算法。

int ccount[256];
int ii;
for(ii=0;ii<256;ii++) ccount[ii]=0;
for (ii = 0; ii < text.length; ii++)
{
    ccount[t.charAt(i)%256]++;
}
for (ii = 0; ii<256; ii++) {
    if(ccount[ii]>0) System.out.printf("%c", ii);
}
int账户[256];
int ii;

对于(ii=0;ii对我来说似乎是家庭作业。如果不是,是的,使用
Set
并最大化幸福感。我会这样实现吗:?Set mySet=new Set(t);其中t是用户输入的字符串?谢谢!@Mouse,不,您仍然需要迭代字符串中的字符,然后将它们添加到
集合
@Mouse没问题;很乐意帮助!对我来说似乎是家庭作业。如果不是,是的,使用
集合
并最大化快乐。我是否可以这样实现:?Set mySet=new Set(t);其中t是用户输入的字符串?谢谢!@Mouse,不,您仍然需要迭代字符串中的字符,然后将它们添加到
@Mouse。没问题;很高兴提供帮助!您能给出输入文本、输入模式和正确输出的示例吗?您能给出输入文本、输入模式和正确输出的示例吗?