有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java检查字符串是否有特定的单词

MyString words包含一组由\n分隔的单词(以\n结尾)。 只有当单词不在字符串中时,代码才会将单词添加到字符串中。这些代码块位于for循环中,其中w是要添加的单词

我有

loop: if (w.contains("" + letter)) //This is just to test the words I want to add
{
  for (String s : words.split("\n"))
    if (w.equals(s))
      break loop;
  words += w + "\n";
}

if (w.contains("" + letter))
{
  if (!words.contains("\n"+w+"\n") && words.indexOf(w+"\n") != 0)
    words += w + "\n";
}

但两者似乎都有各自的混乱之处。有没有其他方法可以做到这一点,或者哪种方法执行得更快


共 (6) 个答案

  1. # 1 楼答案

    首先,if不是一个循环。因此,没有必要对其进行标记,以便使用标记的断点

    其次,你的两个代码都没有真正做到,你说你想做的。还有,我不明白你为什么要做这个测试。以及w的用途

    您说:-w being the word to add,但您再次表示,如果字符串不在array中,您将在"\n"上拆分后添加字符串中的单词。因此,您添加了许多单词,而不仅仅是一个单词。请重新阅读您的帖子,并在必要时进行编辑


    根据您当前的问题陈述,我将这样处理:

    • 首先在"\n"上拆分行以获得包含单个单词的数组
    • 如果我想在每次迭代中修改字符串,我宁愿使用StringBuilderStringBuffer
    • 现在,在每次迭代中,检查您的StringBuilder是否已经包含该word。如果它不包含,则附加它,否则保留它
    • 在循环结束时,打印StringBuilder实例

    或者,正如您所说,您也可以使用ArrayList来存储您的单词。或者,如果您只想要unique个单词,您应该使用Set。那就不需要你做测试了。它自己处理副本:-

    List<String> wordList = new ArrayList<String>();
    
    Set<String> set = new LinkedHashSet<String>();
    
    for (String s : words.split("\n")) {
    
        if (s.contains("" + letter)) {
    
            if (!wordList.contains(s)) {
                wordList.add(s);   // Add to list. 
            }
            set.add(s);   // Add to set.
        }
    }
    

    然后通过迭代其中一个来打印ArrayListSet

  2. # 2 楼答案

    如何将单词存储在ArrayList中,并在添加单词之前检查ArrayList是否包含该单词?如果顺序不重要,则使用集合

    使用集合会容易得多,当需要显示时,可以将其转换为字符串。例如:

    List wordList = new ArrayList();
    
    public void addWord(String word){
        if(!wordList.contains(word)){
            wordList.add(word);
        }
    }
    
    public String displayWordsAsString(){
        StringBuilder builder = new StringBuilder();
        for(int i = 0; i < wordList.size(); i++){
            //add this condition if you only want a new line between words and not every time.
            if(i > 0)
                builder.append("\n");
    
            builder.append(word); 
        }
    
        return builder.toString();
    }
    
  3. # 3 楼答案

    你可以用

    Set<String> words = LinkedHashSet<String>();
    
    if (words.add("" + letter)) {
        // Added.
    }
    

    它保持了添加单词的顺序

  4. # 4 楼答案

    我建议使用列表

    ArrayList<String> wordList = new ArrayList() ;
    // to add
    if (w.contains("" + letter) && wordList.contains(w) )
    {
       wordList.add(w);
    }
    //at the end you can append \n
    StringBuilder bdr = new StringBuilder() ;
    for(String word : wordList)
    {
         bdr.append(word).append("\n");
    }
    String words = bdr.toString();
    
  5. # 5 楼答案

    //如果您试图在字符串中查找单词/特定单词,此代码肯定会对您有所帮助

    公共类findWordFromString{

    public static void main(String[] A)
    {
        String str = "Manhattan is a great company";
        String search = "great";
        boolean flag= false;
    
    // here first split or break the string,based on the space present btween each word
        String[] arr = str.split(" "); 
          for(int i=0;i<arr.length;i++)
         {
    
            if(arr[i].**equals**(search)) // here,never use == instead of equals()  
            {
              flag = true;
                break;
            }
         }//for loop
    
            if(flag)
            {
               System.out.println(search+" is present");    
            }else
            {
                System.out.println(search+" is not present");
            }
    }//method
    

    }//class

  6. # 6 楼答案

    我会将您添加的不同单词存储在列表中

    List<String> words = new ArrayList<String>();
    
    void addWord(String word){
        if(!words.contains(word)){
            words.add(word);
        }
    }
    
    String listAsString(){
        StringBuilder buffer = new StringBuilder();
        for(String word: words){
            buffer.append(word);
            buffer.append("\n");
        }
        return buffer.toString();
    }