【问题标题】:Checking if a word from file matches a random character string from EditText检查文件中的单词是否与 EditText 中的随机字符串匹配
【发布时间】:2017-10-05 12:12:33
【问题描述】:

如何检查来自 EditText 字符串的随机字符集是否与文件中的某个单词匹配?

例如:

EditText 输入:TINARSE
可以匹配 NASTIER、STAINER 等单词。
假设文件中的一个单词用 i 表示。

我知道如何从文件中读取字符串只是无法弄清楚如何使用 IF 语句将其与随机字符输入相匹配。

注意:字符串长度应与EditText长度一致


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    anagram=(EditText)findViewById(R.id.inputtext);
    submit=(Button)findViewById(R.id.submit);
    viewall=(TextView)findViewById(R.id.list);
    viewall.setMovementMethod(new ScrollingMovementMethod());
    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            String a =anagram.getText().toString();
            checkword("cswfifteen.txt",a);



        }
    });

}
private void checkword(String Filename,  String a) {

    StringBuilder builder = null;
    BufferedReader reader = null;
    ArrayList<String> words= new ArrayList<>();

    try {
        builder = new StringBuilder();
        reader = new BufferedReader(new InputStreamReader(
                getAssets().open(Filename)

        ));


        String Line;
            while ((Line = reader.readLine()) != null) {

                builder.append(Line).append("\n");

            }
            String[] dict = builder.toString().split("\n");


                for (String i : dict) {



                    char[] b = i.toString().toCharArray();
                    Arrays.sort(b);

                   char[] c=a.replace("?","").toCharArray();
                    Arrays.sort(c);
                    if (String.valueOf(b).contains(String.valueOf(c)) && b.length==a.length()){
                        words.add(i);}



            }

        Collections.sort(words);
        StringBuilder result = new StringBuilder();
            for (String i : words)
            {

                result.append(i + "\n");
            }
            viewall.setText(result.toString());


    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

【问题讨论】:

    标签: java android string file android-edittext


    【解决方案1】:

    对 EditText 中的文本和文件中的单词 i 进行排序。比较这两个字符串。

    String textFromEditText= "zxbc";
    String wordFromFile="cxbz";
    char a[] = textFromEditText.toCharArray();
    char c[] = wordFromFile.toCharArray();
    Arrays.sort(a);
    Arrays.sort(c);
    System.out.println(String.valueOf(a).equalsIgnoreCase(String.valueOf(c)));
    

    【讨论】:

    • 但在这种情况下,可能只有一个词匹配。其余可能与这组字母匹配的呢?
    • 能否有一些东西可以查看字母集是否在特定的字符串中?
    • 你是说一组字母作为子字符串吗?
    • 可能生病再举个例子:假设用户输入SATREID。因此该文件可能包含诸如 ARIDEST 之类的单词。文件中与字母集匹配的单词。
    • 在这种情况下,您可以从文件中读取单词,对它们进行排序并与编辑文本字符串中的文本进行比较。
    【解决方案2】:

    使用String.contains()

    String name="what do you know about me";
    if(name.contains("do you know"))
    {
    // do stuff
    }
    

    您可以将额外属性与contains() 结合使用,例如trim()equalsIgnoreCase()

    【讨论】:

    • 感谢 shashank 的回答 :) 我尝试了 pradip 的方法,它奏效了 :)
    • 如果您发现这些解决方案在任何方面都有帮助,请点赞。谢谢你。 :)
    • 嘿shanshak,告诉我一件事?是否包含查找字符串的顺序?像 shd 的顺序一样吗?假设一个词是最有趣的,而我是讽刺的?在哪里 ?可以是 A-Z 中的任何字母,如果我们排除 ?,Contain 将匹配其他 6 个字母
    • 非常感谢 Shankshak,您的回答真的很有帮助:D。抱歉,我可以投票,但作为新用户,我的投票暂时无法显示 :) 干杯! :)
    • 我认为是的。使用正则表达式(正则表达式)是可能的。尝试在谷歌上搜索单词字母集的正则表达式,你应该会得到一些有用的东西。 TLDR;这是可行的。
    【解决方案3】:
    for (String i : dict) {
    
                        char[] b = i.toString().toCharArray();
                        Arrays.sort(b);
                        char c[]=a.replace("?","").toCharArray();
                        Arrays.sort(c);
                        if (String.valueOf(b).contains(String.valueOf(c)) && b.length==a.length()) {
                            words.add(i);}
    
    
                }
    
            Collections.sort(words);
            StringBuilder result = new StringBuilder();
                for (String i : words)
                {
                    result.append(i + "\n");
                }
    

    这是我的代码。它工作得很好,但省略了一些与 contains 方法不匹配的单词。排序的示例可能是 ?AEIRST ,其中空白可以是从 A 到 Z 的任何字母,因此它将忽略一些在对其字母进行排序后可能在第二个索引上包含 B 或 C 或 D 的单词。如何应对?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 2018-02-28
      • 1970-01-01
      相关资源
      最近更新 更多