这是我第一次在这里发帖,所以请告诉我是否需要更正这篇文章中的任何内容。我想帮助一些给我带来麻烦的事情。我需要检查一个字符串的字符是否出现在另一个字符串中,但只需要检测一次。例如,对于字符串" 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;
}
}
答案 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;
}
这是非常低效的,因为它每次都必须创建一个新的字符串,如果你想让它更好一点,可以使用字符串生成器来改变字符串以删除找到的字符。