如何通过空格格式化文本?

时间:2015-04-08 09:28:43

标签: java android string-formatting number-formatting decimalformat

在Android应用程序中,我有一个字段,用户应键入一些14位数字,如12345678901234。 我想这个号码看起来像12 3456 7890 1234。 我试过通过代码来做到这一点:

if((s.length() == 2 || s.length() == 7 || s.length() == 12)){
s.insert(s.length(), " ");
}

但是当用户开始输入文本的中间部分时,我的代码工作错误。

我试过使用DecimalFormat类:

DecimalFormat decimalFormat = new DecimalFormat("##,####.#### ####");
String formattedText = decimalFormat.format(Double.parseDouble(etContent.getText().toString()));

但是我收到了IllegalArgumentException。  任何想法如何做到这一点? P.S主要问题是我应该“现在”格式化文本,如:
1
12个
12 3
12 34
12 345
12 3456
12 3456 7
12 3456 78
12 3456 789
12 3456 7890
12 3456 7890 1
12 3456 7890 12
12 3456 7890 123
12 3456 7890 1234

4 个答案:

答案 0 :(得分:1)

@Karthika PB我认为它将删除第3个字符,即12 4567就像它会来的那样。 试试这个

    String seq = editText.getText().toString().trim();

    String newstring = "";
    for (int i = 0; i < seq.length(); i++) {

        if (i == 2 || i == 6 || i == 10) {
            newstring = newstring + " " + seq.charAt(i);

        } else
            newstring = newstring + seq.charAt(i);
    }

答案 1 :(得分:0)

try this remove white spaces and insert space

 String seq=etContent.getText().toString().trim();//to remove white spaces


         String newstring="";
    for(int i=0;i<seq.length();i++){

        if(i==2 || i==7 || i==14){
            newstring=newstring+" ";

        }
        else
        newstring=newstring+seq.charAt(i);
    }

使用具有格式化文本的新闻字符串

答案 2 :(得分:0)

只需使用子字符串方法:

String formattedText = s.substring(0,2) + " " + s.substring(2,6)+
         " " + s.substring(6,10) + " " + s.substring(10,14);

答案 3 :(得分:0)

在TextWatcher.afterTextChanged(可编辑)

中尝试这些代码
        @Override
        public void afterTextChanged(Editable s) {
            if (changeText) {
                Log.d("afterTextChanged", "afterTextChanged");
                String txt = s.toString();
                txt = txt.replaceAll("\\s+", "");
                changeText = false;
                s.clear();
                int index = 0;
                for (char c:txt.toCharArray()) {
                    if (index == 2
                            || index == 7
                            || index == 12) {

                        s.append(' ');
                        index++;
                    }
                    s.append(c);
                    index++;
                }
                changeText = true;
            }
        }

changeText是一个布尔标记,可以防止无限循环。