【问题标题】:How to compare words of one string in Java with words of another string and separate the words on match?如何将Java中一个字符串的单词与另一个字符串的单词进行比较并将匹配的单词分开?
【发布时间】:2017-07-26 14:16:49
【问题描述】:

这是一道面试题。 您被告知从用户获取字符串输入并输出一个字符串(或字符串数​​组),该字符串由空格分隔,其中有意义的单词与另一个称为 Dictionary 的字符串匹配。您有一个字典功能来检查单词是否存在。
例如:
如果Input is "howareyou" Output should be "how are you".
字典字符串中存在单词“how”、“are”、“you”。

还有一个例子:
Input: "somethingneedstobedone Output: "something needs to be done (假设字典中有 something、needs、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();
}

评论的案例运作良好,但帮助我处理第二个案例。

【问题讨论】:

  • 请附上您尝试过的代码。
  • 另外,目前还不清楚字典是如何表示的。
  • something 可以解析为somethingsome thing

标签: java arrays string


【解决方案1】:

您遇到的问题(以及第一个字符串成功而第二个不成功的原因)与字典中的单词顺序有关。 您当前的实现检查字典中的单词是否完全按照它们输入字典的顺序出现在字符串中 - 找到第一个单词后,输入一个空格,然后继续查找第二个单词。如果您没有找到下一个单词,则不要继续该过程。

有很多方法可以重写代码以获得你想要的,但最小的变化是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多