如何检查有多少EditTexts是空的?

时间:2013-08-09 14:19:58

标签: java android

我有10个editTexts,我从中得到文本:

EditText naamField1 = (EditText) findViewById(R.id.naam1);
        EditText naamField2 = (EditText) findViewById(R.id.naam2);
        EditText naamField3 = (EditText) findViewById(R.id.naam3);
        EditText naamField4 = (EditText) findViewById(R.id.naam4);
        EditText naamField5 = (EditText) findViewById(R.id.naam5);
        EditText naamField6 = (EditText) findViewById(R.id.naam6);
        EditText naamField7 = (EditText) findViewById(R.id.naam7);
        EditText naamField8 = (EditText) findViewById(R.id.naam8);
        EditText naamField9 = (EditText) findViewById(R.id.naam9);
        EditText naamField10 = (EditText) findViewById(R.id.naam10);
        speler[1] = naamField1.getText().toString();
        speler[2] = naamField2.getText().toString();
        speler[3] = naamField3.getText().toString();
        speler[4] = naamField4.getText().toString();
        speler[5] = naamField5.getText().toString();
        speler[6] = naamField6.getText().toString();
        speler[7] = naamField7.getText().toString();
        speler[8] = naamField8.getText().toString();
        speler[9] = naamField9.getText().toString();
        speler[10] = naamField10.getText().toString();

承认,这不是最漂亮的代码,但我怎样才能检查这些字符串中有多少,edittexts是空的? 到目前为止我已经尝试了

for (int i = 1; i==10; i++)
        {
            if (speler[i] == "")
            {
                numberOfPlayers = i--;
                break;
            }
        }

for (int i = 1; i==10; i++)
        {
            if (!TextUtils.isEmpty(speler[i]))
            {
                numberOfPlayers++;
            }
        }

我在代码的开头声明numberOfPlayers为0。

所以,是的,如果有人可以帮助或指出我正确的方向,那就太好了。

6 个答案:

答案 0 :(得分:4)

如前所述,您从错误的index开始,因为Java中的Arrays的基数为0且您的循环错误。此外,您正在比较错误的字符串。它应该像

for (int i =0; i<10; i++)
    {
        if (speler[i].equals(""))
        {
            numberOfPlayers = i--;
            break;
        }
    }

可能更有效,更安全的方式来实现它

for (int i = 1; i<speler.length; i++)
    {
        if ("".equals(speler[i]))
        {
            numberOfPlayers = i--;
            break;
        }
    }

这样,如果数组长度发生变化,则无需继续调整for loop,因为它现在不是硬编码的。它还可以通过切换NPE语句来防范.equals()

答案 1 :(得分:1)

ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("Buffon");
arrayList.add("");
arrayList.add("Messi");
arrayList.add("");
int count= 0;
for(String player:arrayList){
    if(!player.equals("")){
        count++;
    }
}
Log.d("playercount", "currentPlayers: "+count);

我就是这样做的。

你必须创建一个ArrayList并添加你的玩家。添加它们之后,您可以循环遍历列表并检查String是否为空。

希望我能帮助你。

答案 2 :(得分:1)

您必须在检查时将值放在字符串数组中。如果你把它们放在数组中,让我们说在OnCreate中,值将在数组中,如果你执行循环让我们说在某个按钮点击监听器,同时用户改变文本框的内容你的代码在监听器中将是错。

你需要先声明字符串数组:

String[] speler = new String[10]; // array with indexes from 0 to 9 (nonresizable)

然后检查循环:

for(int i=0; i<10;i++)
{
     if(speler[i].equals(""))
     {
        counter++;                          
     }
}

答案 3 :(得分:0)

无需检查两次,因为您已经将编辑文本中的值分配给字符串数组。所以使用

for (int i = 0; i<=9; i++) { if (speler[i] == "") { numberOfPlayers = i--; break; } }

答案 4 :(得分:0)

改进提示

private static final int EDIT_TEXT_IDS = {
    R.id.naam1,
    R.id.naam2,
    R.id.naam3,
    R.id.naam4,
    R.id.naam5,
    R.id.naam6,
    R.id.naam7,
    R.id.naam8,
    R.id.naam9,
    R.id.naam10}

...

EditText[] naamField = new EditText[10];
for (int i=0; i<10; i++) {
  naamField[i] = (EditText) findViewById(EDIT_TEXT_IDS[i]);
  speler[i] = naamField[i].getText().toString();
}

答案 5 :(得分:0)

我不知道你的输出,但你没有提及,使用equals methos dude比较字符串值。

String a = new String(&#34; abc&#34;); String b = new String(&#34; abc&#34;);

现在,现在,a!= b; //因为它比较了这些String对象保存的内存! (它们是不同的对象)

和a.equals(b);是真的;因为equals方法比较了值,即abc。