[android]对二维字符串数组的字符串进行比较,比较只有该数组的最后一个值

标签: Java Android
发布时间: 2017/3/19 18:20:50
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

在比较 demDigits.equals(Numbers[i][j]) 时如果只有真正是 666 二维数组中的最后一个值,从 111 555 的每个值为 false。不能找出原因

public class MainActivity extends AppCompatActivity {

    EditText digits;
    EditText console;
    Button press;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final String[][] Numbers = {
                {"111", "222"},
                {"333", "444"},
                {"555", "666"}
        };
        digits = (EditText) findViewById(R.id.editText4);
        console = (EditText) findViewById(R.id.editText5);
        press = (Button) findViewById(R.id.button3);
        press.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String demDigits = digits.getText().toString();

                for (int i = 0; i < Numbers.length; i++)
                {
                    for(int j = 0; j < Numbers[i].length; j++ )
                    {

                        if (demDigits.equals(Numbers[i][j]))
                        {
                            console.setText("works");
                            //break;
                        }
                        else
                        {
                            console.setText("nope");
                        }
                    }
                }
            }
        });
    }
}

解决方法 1:

你可能会遇到更多比你从你的digits.getText()方法正如@Ekundayo所指出在他发布的代码的注释中。检查,你应该会得到字符串长度为 3,做适当的比较︰

final String demDigits = digits.getText().toString();

// Read LogCat to see output with method below
// or use whatever you want to display desired 
// output.
Log.d("demDigits", "demDigits Length = " + demDigits.length());

它永远不会是一件坏事,修剪用户输入因为额外的空格是便于用户在输入过程中应用。对于一些人来说它是一个彻头彻尾的习惯。正如@Ekundayo所已经建议︰

final String demDigits = digits.getText().toString().trim();

应该照顾这一问题。

因为你在你的代码中有注释的中断语句自然假定你想要打破你的for循环,一旦取得了成功的比较。这使得总感觉,因为它是一种浪费的 timeprocess 任何进一步的除非当然你其实想要的。正如@1blustone在他的评论,适当地打破这两个内部和外部循环内已经指出你会需要超过一个break语句,你需要一个 for each 循环。这里是如何你可以实现这一点︰

final String demDigits = digits.getText().toString().trim();

for (int i = 0; i < Numbers.length; i++) {
    boolean mustBreak = false;
    for(int j = 0; j < Numbers[i].length; j++ ) {
        if (demDigits.equals(Numbers[i][j])) {
            console.setText("works");
            mustBreak = true;
            break;
        }
        else {
            console.setText("nope");
        }
    }
    if (mustBreak) { break; }
}

但由于某些原因,我认为你已经知道这个;)

赞助商