Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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/3/android/179.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
Java Android edittext:格式化数字_Java_Android_Android Edittext_Format_String Formatting - Fatal编程技术网

Java Android edittext:格式化数字

Java Android edittext:格式化数字,java,android,android-edittext,format,string-formatting,Java,Android,Android Edittext,Format,String Formatting,我有一个edittext,如果我输入的数字是100000,结果必须是100.000,如果我输入的是1000000,结果必须是1.000.000 从最后到开始的每3个字符后面必须有一个“” 这是我的密码: tambah = (EditText)rootView.findViewById(R.id.total); tambah.setOnFocusChangeListener(new OnFocusChangeListener(){ public void onFocusChange(

我有一个
edittext
,如果我输入的数字是
100000
,结果必须是
100.000
,如果我输入的是
1000000
,结果必须是
1.000.000

从最后到开始的每3个字符后面必须有一个“

这是我的密码:

tambah = (EditText)rootView.findViewById(R.id.total);
tambah.setOnFocusChangeListener(new OnFocusChangeListener(){
       public void onFocusChange(View v, boolean hasFocus) {
              // ...
       }
你应使用:


使用editText.setContextChangeListener()并检查每次位置是否为3的倍数,在那里放一个(点)..

这是我用来输入美元的东西。它确保在任何时候小数点后只有2位。您应该能够通过删除$符号使其适应您的需要

amountEditText.setRawInputType(Configuration.KEYBOARD_12KEY);
amountEditText.addTextChangedListener(new TextWatcher() {
    public void afterTextChanged(Editable s) {}
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

public void onTextChanged(CharSequence s, int start, int before, int count) {
    if(!s.toString().matches("^\\$(\\d{1,3}(\\,\\d{3})*|(\\d+))(\\.\\d{2})?$"))
    {
        String userInput= ""+s.toString().replaceAll("[^\\d]", "");
        StringBuilder cashAmountBuilder = new StringBuilder(userInput);

        while (cashAmountBuilder.length() > 3 && cashAmountBuilder.charAt(0) == '0') {
            cashAmountBuilder.deleteCharAt(0);
        }
        while (cashAmountBuilder.length() < 3) {
            cashAmountBuilder.insert(0, '0');
        }
        cashAmountBuilder.insert(cashAmountBuilder.length()-2, '.');
        cashAmountBuilder.insert(0, '$');

        amountEditText.setText(cashAmountBuilder.toString());
        // keeps the cursor always to the right
        Selection.setSelection(amountEditText.getText(), cashAmountBuilder.toString().length());

    }

}
});
amountEditText.setRawInputType(配置键盘键);
amountEditText.addTextChangedListener(新的TextWatcher(){
公共无效后文本更改(可编辑的s){}
public void beforeTextChanged(字符序列s、int start、int count、int after){}
public void onTextChanged(字符序列、int start、int before、int count){
如果(!s.toString().matches(“^\\$(\\d{1,3}(\\,\\d{3})*\\(\\d+)(\\\.\\d{2})?$”)
{
字符串userInput=“”+s.toString().replaceAll(“[^\\d]”,“”);
StringBuilder cashAmountBuilder=新的StringBuilder(用户输入);
while(cashAmountBuilder.length()>3&&cashAmountBuilder.charAt(0)='0'){
cashAmountBuilder.deleteCharAt(0);
}
while(cashAmountBuilder.length()<3){
cashAmountBuilder.insert(0,'0');
}
插入(cashAmountBuilder.length()-2',”;
cashAmountBuilder.insert(0,“$”);
amountEditText.setText(cashAmountBuilder.toString());
//将光标始终保持在右侧
Selection.setSelection(amountEditText.getText(),cashAmountBuilder.toString().length());
}
}
});

首先将字符串格式化为
%,d
格式,然后将所有(,)替换为(.),如下所示

    String formatedString = (String.format("%,d", 1000000)).replace(',', '.');

    Log.d("Fomated String", formatedString);
输出:

 D/Fomated String(20323): 1.000.000

用下面的循环来做怎么样

String Number=1000000;
final int THREE=3;
int noOfPoints,length,Start=0,End=0;

length=Number.length();
noOfPoints=length%THREE;
if(noOfPoints*THREE==length)
noOfPoints--;
String OutPut="";

for(int Count=0;Count<=noOfPoints;Count++)
{
Start=End;
if(Count==0)
End=length-(THREE*noOfPoints);
else
End=Start+THREE;

if(Count!=noOfPoints)
OutPut+=Number.substring(Start,End)+".";
else
OutPut+=Number.substring(Start,End);
}
字符串编号=1000000;
最终int 3=3;
int noOfPoints,长度,开始=0,结束=0;
长度=数字。长度();
noOfPoints=长度%3;
if(noOfPoints*THREE==长度)
无点--;
字符串输出=”;

对于(int Count=0;Count,这里是另一个答案。希望它能帮助您,简单,并且可以格式化给定参数的大小(formatsize,loook在示例调用中) 看一看

/** * *@param输入 *@param formatsize *@返回 */


关于…

是的,你是对的,但我需要一个逻辑来格式化字符串,我使用2位你可以设置3位总是欢迎的伙计,只要尝试一下我希望它对你有用:)我是android初学者,我想问,什么函数:if(!s.toString().matches(^\$)(\\d{1,3}(\\,\\d{3})*(\\d+)(\\d+)(\\\\\\.\\d{2})$)这是一个正则表达式。请阅读有关此的详细信息给我完整的逻辑,请帮助我。检查位置%3==0我认为edittext上没有事件SetContextChangeListener()
String Number=1000000;
final int THREE=3;
int noOfPoints,length,Start=0,End=0;

length=Number.length();
noOfPoints=length%THREE;
if(noOfPoints*THREE==length)
noOfPoints--;
String OutPut="";

for(int Count=0;Count<=noOfPoints;Count++)
{
Start=End;
if(Count==0)
End=length-(THREE*noOfPoints);
else
End=Start+THREE;

if(Count!=noOfPoints)
OutPut+=Number.substring(Start,End)+".";
else
OutPut+=Number.substring(Start,End);
}
public String format(String input, int formatsize) {

    String formattedNumberString = "";
    int len = input.length();

    if (len < formatsize)
        return input;

    if (formatsize < 2) {
        System.out.println("Opppps");
        return "";
    }

    for (int i = 0; i < len; i += formatsize) {
        if (i < formatsize) {
            formattedNumberString = input.substring(input.length()
                    - formatsize - 1, input.length() - 1);
        } else {

            if (len - i <= formatsize) {
                formattedNumberString = input + "." + formattedNumberString;
            } else {
                formattedNumberString = input.substring(input.length()
                        - formatsize - 1, input.length() - 1)
                        + "." + formattedNumberString;
            }
        }

        if (input.length() >= formatsize)
            input = input.substring(0, len - i - formatsize);
    }

    return formattedNumberString;
}
NumberFormatterClass nfc = new NumberFormatterClass();
System.out.println(nfc.format("1032432420000000000000", 3));
System.out.println(nfc.format("1032432420000000000000", 4));
System.out.println(nfc.format("1032432420000000000000", 5));
System.out.println(nfc.format("1032432420000000000000", 2));