java - 如何将Java中一个字符串的单词与另一个字符串的单词进行比较并在匹配时分隔单词?

标签 java arrays string

这是一个面试问题。 系统告诉您从用户处获取字符串输入并输出一个字符串(或字符串数​​组),该字符串(或字符串数​​组)以空格分隔,并且有意义的单词与另一个称为“词典”的字符串相匹配。您有一个字典功能来检查单词是否存在。
例如:
如果输入是“howareyou” 输出应该是“how are you”
其中单词“how”、“are”、“you”存在于字典字符串中。

再举一个例子:
输入:“需要做一些事情 输出:“需要做一些事情 (假设字典中有诸如 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();
}

评论的案例效果很好,但请帮助我让第二个案例发挥作用。

最佳答案

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

有很多方法可以重写代码以获得您想要的结果,但最小更改是:

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

关于java - 如何将Java中一个字符串的单词与另一个字符串的单词进行比较并在匹配时分隔单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45329596/

相关文章:

java - 在安卓中删除文件

java - 将方法应用于 float 数组流时出现问题?

c++ - C++中的数组初始化

c++ - 无法将在 Arduino 串行监视器中编写的内容保存为字符串/字符

java - 如何从 servlet 发送数组并在 HTML jquery 中接收?

java - 引用 BufferedReader 对象的 Reader 类型的对象无法访问 readLine() 方法

javascript - 迭代 js 对象数组,在每个对象内,检查对象中的值与所有其他值的唯一性,推送到新数组

javascript - 我不知道如何将用户的输入附加到 Javascript 中的数组中

javascript - 7 行,包含数组中的值

c++ - 在 C++ 中将 double 转换为 char*/string