Android拆分''

时间:2014-08-11 22:00:13

标签: java android

我想分割一个字符串,例如:5 121 121中的5121321,每3个是一个' &#39 ;. 我有那个代码:

private void compor()
{
    String dinheiro="5121321";

    char aux[]= new char[dinheiro.length()];

    for(int i=0;i<dinheiro.length();i++)
    {
       aux[i]=dinheiro.charAt(i);
    }

    int flag=0;

    String total="";
    for(int i=0;i<dinheiro.length();i++)
    {
        if(flag==3)
        {
            total+=' ';
            flag=0;
        }

        total += String.valueOf(aux[i]);
        flag++;
    }
    TextView txt = (TextView) findViewById(R.id.textView3);
    txt.setText(String.valueOf(total));
}

问题是输出是:512 132 1我想要5 121 321.对不起我的英文。 有人可以帮帮我吗?谢谢。

5 个答案:

答案 0 :(得分:4)

看起来你只是想做一般的数字格式化。使用框架实用程序的简单解决方案是:

public static String splitNumericString(String numeric) throws NumberFormatException {
    // Create a new DecimalFormatSymbols instance and set the
    // grouping separator to a space character
    DecimalFormatSymbols symbols = new DecimalFormatSymbols();
    symbols.setGroupingSeparator(' ');

    // Construct a new NumberFormat defining a 3 digit grouping
    // pattern
    NumberFormat format = new DecimalFormat("#,###", symbols);

    // Converts the string into an actual numeric value
    long number = Long.parseLong(numeric);

    // Return the formatted string
    return format.format(number);
}

编辑:鉴于@ Squonk的信息,这变成了一个单行:

return NumberFormat.getInstance(Locale.FRANCE).format(Long.parseLong(numeric));

虽然在输入字符串格式不正确的情况下应该捕获NumberParseException。

答案 1 :(得分:2)

(1)只需向后循环穿过字符串。并使用与您使用的相同的想法。这会按照你想要的方式分割它。 (2)或者,您可以使用%(modulo)运算符计算第一个完整三元组的起始位置(我的意思是字符串长度%3)。

方法(2)的示例代码:

public class Test007 {

    public static void main(String[] args) {

        String dinheiro="5121322";

        int i = dinheiro.length() % 3;

        String s1 = "";

        s1 = dinheiro.substring(0, i);

        String s2 = "";

        for (int k=i; k<dinheiro.length(); k+=3){
            if (k!=i || i>0){
                s2 += " ";
            }
            s2 += dinheiro.substring(k, k+3);
        }

        System.out.println(s1 + s2);

    }

}

答案 2 :(得分:1)

不要在循环中连接,而是使用stringbuilder:

String input = /*...*/;
StringBuilder sb = new StringBuilder();
int i = 2;
for (char c : input.toCharArray()) {
    sb.append(c);
    i++;
    if (i == 3) {
        sb.append(' ');
        i = 0;
    }
}
String result = sb.toString();

答案 3 :(得分:0)

以下是Peter Petrov解决方案的变体:

public static String group(String in) {
    // Get the length of the first group
    int i = (in.length() - 1) % 3 + 1;

    // Add the first group
    String out = in.substring(0, i);

    // Add the other groups, each prefixed with a space
    for (int k = i; k < in.length(); k += 3){
        out += " " + in.substring(k, k + 3);
    }

    return out;
}

我们得到第一组的长度,我们用第一组初始化输出,然后我们检查输入的其余部分,一次追加一组3位数。这就是它的全部内容。

棘手的一点是在第一行。仅使用in.length() % 3无效,因为这会阻止第一组拥有3位数。例如,输入"123456"将导致i == 0并输出" 123 456"(请注意开头的不需要的空间)。 Peter使用if检查来处理这种情况,但事实证明你也可以通过改变i来处理它。

我们希望in.length()i之间的关系如下:

in.length() |   i | (in.length() - 1) % 3
------------------------------------------
         0  |   0 |                    -1
         1  |   1 |                     0
         2  |   2 |                     1
         3  |   3 |                     2
         4  |   1 |                     0
         5  |   2 |                     1
       ...  | ... |                   ...

在模数之前减去一个并在之后添加它给我们这个关系(模数在第三列之后的部分结果)。它甚至可以处理in为空字符串的特殊情况! :-P

答案 4 :(得分:0)

使用简单算术比使用字符串操作更容易编写解决方案:

public static String groupDigits(int amount) {  
    String total = "";

    while (amount > 0) {
        Integer digits = amount % 1000;
        amount = amount / 1000;
        total = digits.toString() + " " + total;
    }

    return total;
}