2016-09-10 9 views
1

私はユーザーが高さをセンチメートルでフィート+インチで入力できる編集テキストを持っています。私はターゲットユニットのトグルボタンを持っているので、ユーザがセンチメートルを選択すると、入力されたテキストをフィート+インチからセンチメートルに変換する必要があります。 今度は高さを変換していますセンチメートルには最後に "\" "が追加されます。私はそれが原因でカウントが3高さの変換 - cmからフィートとインチへ(逆もまた同様)

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することができます。その方法は、配列の最初の項目は、足の数である。

その後、我々は持っています分割文字列の2番目の項目は左: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などの場合、 'cmimeterToFeet'は機能しません。 –

関連する問題