这是一个面试问题。
你被告知要从用户&输出一个由空格分隔的字符串(或字符串数组),其中有意义的单词与另一个名为Dictionary的字符串匹配。你有一个字典功能来检查单词是否存在
例如:
如果Input is "howareyou"
Output should be "how are you"
。
在哪里,',',',','你'存在于字典字符串中。
还有一个例子:
Input: "somethingneedstobedone
Output: "something needs to be done
(假设字典中包含某些内容,需要,to,be,done 等字样。
如果没有匹配,我没时间做k ++。
我试过的代码:
public class Sample1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int i,j,k,len;
String[] dict= {"how","are","you","something","needs","to","be","done"};
//StringBuilder str=new StringBuilder("howareyou");
StringBuilder str=new StringBuilder("somethingneedstobedone");
len=str.length();
for(i=0,j=0,k=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if(dict[k].toString().equals(str.substring(i, j)))
{
str.insert(j, " ");
k++;
}
}
}
System.out.println(str);
sc.close();
}
评论的案例运作良好,但帮助我得到第二个案例。
答案 0 :(得分:1)
您遇到的问题(以及第一个字符串成功而第二个字符串不成功的原因)与dict中的单词顺序有关。 您当前的实现检查dict中的单词是否完全按照它们输入到dict中的顺序出现在字符串中 - 在找到第一个单词后,放入一个空格然后继续查找第二个单词。如果您没有找到下一个单词,则不会继续此过程。
有很多方法可以重写代码以获得您想要的内容,但最小更改是:
public class Sample1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int i,j,k,len;
String[] dict= {"how","are","you","something","needs","to","be","done"};
//StringBuilder str=new StringBuilder("howareyou");
StringBuilder str=new StringBuilder("somethingneedstobedone");
len=str.length();
for(i=0,j=0;i<len;i++) //removed k from here
{
for(j=i+1;j<len;j++)
{
for (k=0;k<dict.length;k++) { //added this loop!
if(dict[k].toString().equals(str.substring(i, j)))
{
str.insert(j, " ");
}
} //Loop closing for k - the dictionary
}
}
System.out.println(str);
sc.close();
}