检查单词所包含的字母是否存在于另一个字符串中

时间:2014-03-16 00:06:08

标签: java string for-loop substring contains

这是我第一次在这里发帖,所以请告诉我是否需要更正这篇文章中的任何内容。我想帮助一些给我带来麻烦的事情。我需要检查一个字符串的字符是否出现在另一个字符串中,但只需要检测一次。例如,对于字符串" BFEABLDEG"," LABEL"不应该像现在这样回归真实。

为了澄清,目的不是让程序计数字符。它是让程序检查创建一个单词所需的字母是否包含在randomString中,两个字符串中每个字母的数字完全相同。该计划部分基于游戏节目倒计时。

这是我到目前为止所拥有的。任何帮助将不胜感激。

编辑:感谢所有帮助过我的人。我已经接受了Aru的贡献作为我正在寻找的解决方案,因为它避免了我最准确的问题,因为需要检查字符串的大小。

public static boolean Checkword(){
String randomString = "BFEABLDEG";
 String word = "LABEL";
 {
 for(int i=0;i<word.length(); i++){
      if(randomString.contains(word.substring((i)))){
          return true;

      }
 }
return false;
 }

}

好的,我给出的解决方案适用于基本示例。但是,最终目标是让用户从一串九个随机字符中创建任意长度的单词。目前,他们可以通过输入比字符串更多的任何字符来实现这一点。我想知道是否有人可以帮我这个,因为新的代码已经添加了该函数。

    public static boolean Checkword(String x){
    String randomString = convertToString();
     String word = x;
     {
     for(int i=0;i<word.length(); i++){
          if(randomString.indexOf(word.charAt(i)) == -1){
              return false;

          }
     }
    return true;
     }
}

3 个答案:

答案 0 :(得分:5)

我不确定我是否完全理解你想要实现的目标,但你的方法的整个逻辑是有缺陷的。

显然,一个问题是,如果只是最后一个字符匹配,你的函数将返回true,因为substring(word.length() - 1)将检查最后一个字符是否包含在另一个字符串中。在每个其他循环中,您将检查是否包含整个序列,从整个字符串开始并减少每个循环的字符数。

即使您向word添加不在randomString中的字符,只要它们不在字符串的末尾,该函数将返回true。

这样的事情应该是你原本想要的:

public static boolean checkWord() {
    String randomString = "BFEABLDEG";
    String word = "LABEL";
    for (int i = 0; i < word.length(); i++) {
        if (randomString.indexOf(word.charAt(i)) == -1) {
            return false;
        }
    }
    return true;
}

检查重复字符的简单方法是删除字符串中出现的一个字符。肯定有更高效的解决方案,请务必检查评论中链接的线程。

public static void main(String[] args) throws Exception {
    System.out.println(test("BFEABLDEG", "LABEL"));
}

public static boolean test(String searchIn, String searchFor) {
    for (char c : searchFor.toCharArray()) {
        if (searchIn.indexOf(c) == -1) {
            return false;
        }
        searchIn = searchIn.replaceFirst(Character.toString(c), "");
    }
    return true;
}

答案 1 :(得分:1)

它返回true,因为你测试了randomString的一个char

public static boolean Checkword( String pattern, String randomString ){
  return ( randomString .contains( pattern ) ) ? true : false;
}

String pattern = "LABEL";

String randomString = "BFEABLDEG";
Checkword( pattern, randomString );
//return false

randomString = "AZDAZLABELIIDZA";
Checkword( pattern, randomString );
//return true

答案 2 :(得分:1)

如果您的word变量中包含randomString变量中的任何字符,那么您的程序将返回true。从您的评论来看,您似乎想要检查word字符串中的每个字符是否都包含在randomString变量中。这是一种略有不同的方法。

public static boolean Checkword(){
    String randomString = "BFEABLDEG";
    String word = "LABEL";
    for(int i=0;i<word.length(); i++){
         if(randomString.indexOf(word.charAt(i)) != -1){
             //If the letter isn't contained return false
             return false;
          } else {
              //If the letter is contained remove it from the string
              int charLocation = randomString.indexOf(word.charAt(i));
              randomString = randomString.substring(0, charLocation) + randomString.substring(charLocation+1);
          }
    }
    //If I haven't returned yet, then every letter is contained, return true
    return true;
}

这是非常低效的,因为它每次都必须创建一个新的字符串,如果你想让它更好一点,可以使用字符串生成器来改变字符串以删除找到的字符。