Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android EditText中更改文本时自动添加千个分隔符_Android_Android Edittext - Fatal编程技术网

在Android EditText中更改文本时自动添加千个分隔符

在Android EditText中更改文本时自动添加千个分隔符,android,android-edittext,Android,Android Edittext,对于我想完成的同样的任务,有很多答案,甚至我都找不到任何对我有用的解决方案 我见过 --问题是它正在添加逗号计数“.”(点)也作为数值 --问题是,文本更改时,它没有显示其结果 --问题是它在第15个字母后连续添加0 还有更多的问题和答案 但我没有找到任何符合千年分离器一般要求的产品 有没有什么有用的技巧可以帮助我在文本更改时顺利添加千位分隔符,并对文本进行不同的处理 小数点后的数字像计算器吗 我将感谢任何帮助。我也遇到过同样的问题,为了得到正确的结果,我进行了大量的研究。因此,我最终解决了我们

对于我想完成的同样的任务,有很多答案,甚至我都找不到任何对我有用的解决方案

我见过

--问题是它正在添加逗号计数“.”(点)也作为数值

--问题是,文本更改时,它没有显示其结果

--问题是它在第15个字母后连续添加0

还有更多的问题和答案

但我没有找到任何符合千年分离器一般要求的产品

有没有什么有用的技巧可以帮助我在文本更改时顺利添加千位分隔符,并对文本进行不同的处理 小数点后的数字像计算器吗


我将感谢任何帮助。

我也遇到过同样的问题,为了得到正确的结果,我进行了大量的研究。因此,我最终解决了我们正在搜索的问题,我向您提供了我的代码,这将对您帮助很大,并满足您的要求

您可以在自己的课堂上直接复制我的代码,它经过了全面测试

以下代码的特征

editText.addTextChangedListener(new NumberTextWatcherForThousand(editText));
NumberTextWatcherForThousand.trimCommaOfString(editText.getText().toString());
  • EditText
    中放置千个分隔符作为文本更改

  • 添加0。第一次按下句点(.)时自动

  • 忽略开头的0输入

类名:
NumberTextWatcherForThousand
实现
TextWatcher

import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import java.util.StringTokenizer;

/**
 * Created by Shreekrishna on 12/14/2014.
 */
public class NumberTextWatcherForThousand implements TextWatcher {

    EditText editText;


    public NumberTextWatcherForThousand(EditText editText) {
        this.editText = editText;


    }

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

    }

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

    }

    @Override
    public void afterTextChanged(Editable s) {
        try
        {
            editText.removeTextChangedListener(this);
            String value = editText.getText().toString();


            if (value != null && !value.equals(""))
            {

                if(value.startsWith(".")){
                    editText.setText("0.");
                }
                if(value.startsWith("0") && !value.startsWith("0.")){
                    editText.setText("");

                }


                String str = editText.getText().toString().replaceAll(",", "");
                if (!value.equals(""))
                editText.setText(getDecimalFormattedString(str));
                editText.setSelection(editText.getText().toString().length());
            }
            editText.addTextChangedListener(this);
            return;
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
            editText.addTextChangedListener(this);
        }

    }

    public static String getDecimalFormattedString(String value)
    {
        StringTokenizer lst = new StringTokenizer(value, ".");
        String str1 = value;
        String str2 = "";
        if (lst.countTokens() > 1)
        {
            str1 = lst.nextToken();
            str2 = lst.nextToken();
        }
        String str3 = "";
        int i = 0;
        int j = -1 + str1.length();
        if (str1.charAt( -1 + str1.length()) == '.')
        {
            j--;
            str3 = ".";
        }
        for (int k = j;; k--)
        {
            if (k < 0)
            {
                if (str2.length() > 0)
                    str3 = str3 + "." + str2;
                return str3;
            }
            if (i == 3)
            {
                str3 = "," + str3;
                i = 0;
            }
            str3 = str1.charAt(k) + str3;
            i++;
        }

    }

    public static String trimCommaOfString(String string) {
//        String returnString;
        if(string.contains(",")){
            return string.replace(",","");}
        else {
            return string;
        }

    }
}
以纯文本形式获取输入,键入为
Double

import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import java.util.StringTokenizer;

/**
 * Created by Shreekrishna on 12/14/2014.
 */
public class NumberTextWatcherForThousand implements TextWatcher {

    EditText editText;


    public NumberTextWatcherForThousand(EditText editText) {
        this.editText = editText;


    }

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

    }

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

    }

    @Override
    public void afterTextChanged(Editable s) {
        try
        {
            editText.removeTextChangedListener(this);
            String value = editText.getText().toString();


            if (value != null && !value.equals(""))
            {

                if(value.startsWith(".")){
                    editText.setText("0.");
                }
                if(value.startsWith("0") && !value.startsWith("0.")){
                    editText.setText("");

                }


                String str = editText.getText().toString().replaceAll(",", "");
                if (!value.equals(""))
                editText.setText(getDecimalFormattedString(str));
                editText.setSelection(editText.getText().toString().length());
            }
            editText.addTextChangedListener(this);
            return;
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
            editText.addTextChangedListener(this);
        }

    }

    public static String getDecimalFormattedString(String value)
    {
        StringTokenizer lst = new StringTokenizer(value, ".");
        String str1 = value;
        String str2 = "";
        if (lst.countTokens() > 1)
        {
            str1 = lst.nextToken();
            str2 = lst.nextToken();
        }
        String str3 = "";
        int i = 0;
        int j = -1 + str1.length();
        if (str1.charAt( -1 + str1.length()) == '.')
        {
            j--;
            str3 = ".";
        }
        for (int k = j;; k--)
        {
            if (k < 0)
            {
                if (str2.length() > 0)
                    str3 = str3 + "." + str2;
                return str3;
            }
            if (i == 3)
            {
                str3 = "," + str3;
                i = 0;
            }
            str3 = str1.charAt(k) + str3;
            i++;
        }

    }

    public static String trimCommaOfString(String string) {
//        String returnString;
        if(string.contains(",")){
            return string.replace(",","");}
        else {
            return string;
        }

    }
}
像这样使用同一类的
trimCommaOfString
方法

editText.addTextChangedListener(new NumberTextWatcherForThousand(editText));
NumberTextWatcherForThousand.trimCommaOfString(editText.getText().toString());

当我删除数字时,光标移到末尾