我想分割一个字符串,例如: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.对不起我的英文。 有人可以帮帮我吗?谢谢。
答案 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;
}