Android 有没有办法只解析不为空的文本?

Android 有没有办法只解析不为空的文本?,android,Android,我正在创建一个应用程序,如果斜三角形是可解的,它可以解决缺少的部分,但是我在解析EditText中的数据时遇到了困难。以下是我的代码示例: Double A, B, C, a, b, c; aa = (EditText)findViewById(R.id.angleA); ab = (EditText)findViewById(R.id.angleB); ac = (EditText)findViewById(R.id.angleC); sa = (EditTex

我正在创建一个应用程序,如果斜三角形是可解的,它可以解决缺少的部分,但是我在解析EditText中的数据时遇到了困难。以下是我的代码示例:

Double A, B, C, a, b, c;
    aa = (EditText)findViewById(R.id.angleA);
    ab = (EditText)findViewById(R.id.angleB);
    ac = (EditText)findViewById(R.id.angleC);
    sa = (EditText)findViewById(R.id.sideA);
    sb = (EditText)findViewById(R.id.sideB);
    sc = (EditText)findViewById(R.id.sideC);

if (!aa.getText().toString().isEmpty()){
        A = Double.parseDouble(aa.getText().toString());
    }

    if (!ab.getText().toString().isEmpty()){
        B = Double.parseDouble(ab.getText().toString());
    }

    if (!ac.getText().toString().isEmpty()){
        C = Double.parseDouble(ac.getText().toString());
    }

    if (!sa.getText().toString().isEmpty()){
        a = Double.parseDouble(sa.getText().toString());
    }

    if (!sb.getText().toString().isEmpty()){
        b = Double.parseDouble(sb.getText().toString());
    }

    if (!sc.getText().toString().isEmpty()){
        c = Double.parseDouble(sc.getText().toString());
    }

我想知道是否有较短的编码方法。

您可以编写一个函数来完成这项工作:

Double A, B, C, a, b, c;

public void calc()
{
    A = getValueOrNan(R.id.angleA);
    B = getValueOrNan(R.id.angleB);
    C = getValueOrNan(R.id.angleC);
    a = getValueOrNan(R.id.sideA);
    b = getValueOrNan(R.id.sideA);
    c = getValueOrNan(R.id.sideA);

    if (A == Double.NaN)
    {
        // calc A
    }
    if (B == Double.NaN)
    {
        // calc B
    }

    // ...
}

public Double getValueOrNan(int id)
{
    EditText et = (EditText)findViewById(id);

    if (!et.getText().toString().isEmpty())
    {
        return Double.parseDouble(et.getText().toString());
    }
    else
    {
        return Double.NaN;
    }
}

我能想到的最短、可读的方法是:

// Store EditText ids in an array
int[] editTextIds = new int[] { R.id.angleA, R.id.angleB,
        R.id.angleC, R.id.sideA, R.id.sideB, R.id.sideC };
// Store EditText values in an ArrayList
ArrayList<Double> results = new ArrayList<>();

// Loop ids, saving values to ArrayList
for (int id : editTextIds) {
    String value = ((EditText) findViewById(id)).getText().toString();
    if (TextUtils.isEmpty(value)) {
        results.add(null);
    } else {
        results.add(Double.valueOf(value));
    }
}

// Now:
// results.get(0) = A
// results.get(1) = B
// results.get(2) = C
// results.get(3) = a
// results.get(4) = b
// results.get(5) = c
// If results.get(x) returns null, means value isn't set
使用和Java异常处理

aa = (EditText)findViewById(R.id.angleA);
ab = (EditText)findViewById(R.id.angleB);
ac = (EditText)findViewById(R.id.angleC);
sa = (EditText)findViewById(R.id.sideA);
sb = (EditText)findViewById(R.id.sideB);
sc = (EditText)findViewById(R.id.sideC);

//Rest of the stuff
//
Double saDouble=getVal(sa);


public Double getVal(EditText et){
Double op=Double.NAN;     
try{
if(!TextUtils.isEmpty(et.getText()))
   Double.parseDouble(et.getText().toString());
}catch(NumberFormatException e){
  //log,toast,dialog whatever you need to display.
}
 return op;
}

为什么不创建一个方法来检查和解析它的长度?在什么地方?行数?好的。我的问题终于解决了。我的问题是,当你强制解析空文本时,程序崩溃了。我所做的就是尝试和抓住。谢谢。如果有!=双倍。它不会检查B。