Java 只将每个字母放入一个字符串中一次
我正在为Horspool的算法编写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
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。没问题;很高兴提供帮助!您能给出输入文本、输入模式和正确输出的示例吗?您能给出输入文本、输入模式和正确输出的示例吗?