Java 为什么下面的问题没有通过所有的测试用例?

Java 为什么下面的问题没有通过所有的测试用例?,java,regex,string,stringbuilder,testcase,Java,Regex,String,Stringbuilder,Testcase,我试图解决的编码问题是。我试图解决,但不是所有的测试用例都通过了我无法找到可能的原因是什么 识别可能的单词:Bakshi侦探在破案时偶然发现了一个字母,其中有许多单词缺少一个字符,即单词中的一个字符被下划线替换。例如“Fi_er”。他还发现了一张薄薄的纸条,上面有一组用冒号隔开的单词,例如“Fever:filer:Filter:Fixer:fiber:fiber:fiber:tailor:offer”。他可以从薄薄的纸条中找出缺少一个字符的单词。Bakshi侦探找了一位计算机程序员,请他帮你找出

我试图解决的编码问题是。我试图解决,但不是所有的测试用例都通过了我无法找到可能的原因是什么

识别可能的单词:Bakshi侦探在破案时偶然发现了一个字母,其中有许多单词缺少一个字符,即单词中的一个字符被下划线替换。例如“Fi_er”。他还发现了一张薄薄的纸条,上面有一组用冒号隔开的单词,例如“Fever:filer:Filter:Fixer:fiber:fiber:fiber:tailor:offer”。他可以从薄薄的纸条中找出缺少一个字符的单词。Bakshi侦探找了一位计算机程序员,请他帮你找出每个不完整单词的可能单词

您需要编写一个函数来识别可能的单词集。 函数identifyPossibleWords接受两个字符串作为输入 在哪里,

input1包含不完整的单词,并且 input2是包含一组由冒号分隔的单词的字符串

该函数将从input2中查找所有可能的单词,以替换不完整的单词input1,并以下面建议的格式返回结果

例1-

input1=“Fi\u er” input2=“发烧:文件管理器:过滤器:定影器:光纤:光纤:裁缝:报价”

输出字符串应返回为“FILER:FIXER:FIBER” 请注意——

输出字符串应包含可替换input1中不完整单词的所有可能单词集 输出字符串中的所有单词都应以大写形式存储 输出字符串中的所有单词都应该按照它们在input2中出现的顺序出现,也就是说,在上面的示例中,我们有FILER,后面是FIXER,后面是FIBER。 在input2中搜索input1时,忽略字母的大小写,即“Fi_er”与“filer”以及“Fixer”以及“fiber”匹配。 重要提示:如果input2中的任何单词都不可能替换input1,则输出字符串应包含字符串“ERROR-009” 假设:

Input1将只包含一个单词,其中只有一个字符被下划线“\u1”替换 Input2将包含一系列由冒号分隔的单词,其间没有空格字符 Input2将不包含除下划线和字母字符以外的任何其他特殊字符

我的解决办法是:

 import java.io.*;
import java.util.*;
class UserMaincode
{
   public String indentifyPossibleWords(String input1, String input2)
{
       input1=input1.toUpperCase();
       input2=input2.toUpperCase();

       String arr1[]=input1.split("_");
       String arr2[]=input2.split(":");
       StringBuilder sb=new StringBuilder("");
       for(int i=0;i<arr2.length;i++){
           if(arr2[i].matches(arr1[0]+"."+arr1[1])){
               sb.append(arr2[i]+":");
           }
       }

       if(sb.length()!=0){
           sb.deleteCharAt(sb.length()-1);
       }

       String s=sb.toString();
       if(s==""){
           return "ERROR-009";
       }
       return s;
}
}
但是一些隐藏的测试用例没有通过。问题出在哪里

我从web上找到了一个通过所有测试用例的代码。请参考此链接


在上述问题中,有许多方法可以达到预期的效果。自从您在标签中提到了regex;因此,我将尝试使用regex提供一个可能的解决方案。虽然这也可以在没有它们的情况下实现

拟议程序:

用java实现上述过程:


您可以在

中找到上述实现的示例运行,至少对我来说,这对于一个可能很简单的问题来说太多了。您说测试用例不起作用-所以请提供测试用例:输入、预期输出和代码的输出。也许我们可以告诉你,为什么你的代码不能产生预期的结果。OP可能无法访问失败的测试用例——这在代码质疑网站上很常见,那里有一个问题被陈述并给出了一两个具体的例子,但挑战是写一个完全回答问题陈述的解决方案。它迫使回答者仔细考虑可能的死角案例,并在代码中处理它们。所以我不能放它们,因为我不认识它们@汤姆斯特雷默

 1. Create a regex from the given input1 i.e. replace the _ present anywhere inside input1 with regex dot (.) meta-character.
 2. Split the string based on :.
 3. Keep a count of length of spliced array of input2.
 4. for each item in input2:
      5. match using the regex formed in step 1
            If successful
              append to upper-cased result.
            else:
                 increment the counter.
6. if counter == length of spliced array i.e. no match found
    return "ERROR-009"
   else   
    return the appended result.
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main
{
    public static void main(String[] args) {
        System.out.println(identifyPossibleWords("Fi_er", "Fever:filer:Filter:Fixer:fiber:fibre:tailor:offer"));
//      Fever:fiqqer:Filter:Fixxer:fibber:fibre:tailor:offer return ERROR-009
    }

    public static String identifyPossibleWords(String input1, String input2){
        input1 = input1.replace("_", ".");
        StringBuilder sb = new StringBuilder();
        int counter = 0;
        int lengthOfInput2 = input2.split(":").length;
        final Pattern pattern = Pattern.compile(input1, Pattern.CASE_INSENSITIVE);
        for(String str: input2.split(":")){
            Matcher matcher = pattern.matcher(str);
            if(matcher.matches())sb.append(matcher.group(0).toUpperCase() + "\n"); // \n to print in new line. You can edit the code accordingly.
            else counter++;
        }
        if(counter == lengthOfInput2)return "ERROR-009";
        return sb.toString();
    }
}