2016-09-10 189 views
1

我有一個編輯文本,用戶可以用釐米和英尺+英寸輸入他的高度,例如。 5'11「。我有一個目標單位的切換按鈕,所以我希望當用戶選擇釐米時,它應該將輸入的文本從英尺+英寸轉換成釐米,反之亦然。 現在,當我將高度以釐米爲單位,最後加上「\」「。我認爲這是因爲文本守望者我已經把它在結尾時計數達到3。高度轉換 - 釐米到英尺和英寸(反之亦然)

public void onClick(View view) { 
    switch (view.getId()) 
    { 
     case R.id.btnCm: 
      toggleHeightButton(R.id.btnCm,R.id.btnFeet,false); 
      convertToCentimeter(enter_height); 
      break; 
     case R.id.btnFeet: 
      toggleHeightButton(R.id.btnFeet,R.id.btnCm,true); 
      enter_height.addTextChangedListener(new CustomTextWatcher(enter_height)); 
      break; 
     case R.id.btnKg: 
      toggleweightButton(R.id.btnKg,R.id.btnpound,false); 
      break; 
     case R.id.btnpound: 
      toggleweightButton(R.id.btnpound,R.id.btnKg,true); 
      break; 
    } 
} 

public class CustomTextWatcher implements TextWatcher { 
    private EditText mEditText; 

    public CustomTextWatcher(EditText enter_height) { 
     mEditText = enter_height; 
    } 

    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    } 

    public void onTextChanged(CharSequence s, int start, int before, int count) { 
    } 

    public void afterTextChanged(Editable s) { 
     int count = s.length(); 
     String str = s.toString(); 
     if (count == 1) { 
      str = str + "'"; 
     } else if (count == 2) { 
      return; 
     } else if (count == 3) { 
      str = str + "\""; 
     } else if ((count > 4) && (str.charAt(str.length() - 1) != '\"')){ 
      str = str.substring(0, str.length() - 2) + str.charAt(str.length() - 1) + "\""; 
     } else { 
      return; 
     } 

     mEditText.setText(str); 
     mEditText.setSelection(mEditText.getText().length()); 
    } 
} 

回答

1

這可以用正則表達式可以輕鬆完成添加「\」」,但我想你應該嘗試的第一更直接的方式。

基本上,格式是這樣xx'xx",我們可以使用' deliminator split的字符串。這樣,數組的第一個項目是支腳的個數。

然後,我們有分割字符串的第二項留下:xx"。爲此,我們只需要將其刪除即可刪除最後一個字符,然後我們就可以得到英寸數!

試着自己寫代碼!


如果你真的卡住了,這裏的解決方案:

String str = s.toString(); 
String[] splitString = str.split("'"); 
String firstItem = splitString[0]; 
try { 
    int feet = Integer.parseUnsignedInt(firstItem); 
    String secondPart = splitString[1].substring(0, splitString[1].length() - 1); 
    int inches = Integer.parseUnsignedInt(secondPart); 
    // YAY! you got your feet and inches! 
    System.out.println(feet); 
    System.out.println(inches); 
} catch (NumberFormatException e) { 
    return; 
} 

而這裏的一個解決方案使用正則表達式:

String str = s.toString(); 
Pattern pattern = Pattern.compile("(\\d+)'((\\d+)\")?"); 
Matcher matcher = pattern.matcher(str); 
if (!matcher.matches()) { 
    return; 
} 

int feet = Integer.parseUnsignedInt(matcher.group(1)); 
String inchesStr = matcher.group(3); 
int inches = 0; 
if (inchesStr != null) { 
    inches = Integer.parseUnsignedInt(inchesStr); 
} 

// YAY! you got your feet and inches! 
3

有一個數學計算來管理釐米到腳反之亦然轉換。

public static String feetToCentimeter(String feet){ 
     double dCentimeter = 0d; 
     if(!TextUtils.isEmpty(feet)){ 
      if(feet.contains("'")){ 
       String tempfeet = feet.substring(0, feet.indexOf("'")); 
       if(!TextUtils.isEmpty(tempfeet)){ 
        dCentimeter += ((Double.valueOf(tempfeet))*30.48); 
       } 
      }if(feet.contains("\"")){ 
       String tempinch = feet.substring(feet.indexOf("'")+1, feet.indexOf("\"")); 
       if(!TextUtils.isEmpty(tempinch)){ 
        dCentimeter += ((Double.valueOf(tempinch))*2.54); 
       } 
      } 
     } 
     return String.valueOf(dCentimeter); 
     //Format to decimal digit as per your requirement 
    } 

    public static String centimeterToFeet(String centemeter) { 
     int feetPart = 0; 
     int inchesPart = 0; 
     if(!TextUtils.isEmpty(centemeter)) { 
      double dCentimeter = Double.valueOf(centemeter); 
      feetPart = (int) Math.floor((dCentimeter/2.54)/12); 
      System.out.println((dCentimeter/2.54) - (feetPart * 12)); 
      inchesPart = (int) Math.ceil((dCentimeter/2.54) - (feetPart * 12)); 
     } 
     return String.format("%d' %d''", feetPart, inchesPart); 
    } 
+0

如果'dCentimeter' = 91.44,182.88等'centimeterToFeet'不工作。 –

相關問題