我想在我的应用中更改数字的分隔符。我用十进制格式试了一下。
DecimalFormat x=new DecimalFormat("##'##'##.###");
textview.setText(x.format("1564643");
但我得到了例外,因为十进制格式不支持符号(')。我甚至不知道我所做的是对还是不对。我只需要像12'23'52
这样的格式。还有一个要求是,小数位分隔符(。)应替换为(,)。
任何人都可以帮助我。谢谢。 :)
答案 0 :(得分:3)
试试这个
Locale currentLocale = Locale.getDefault();
DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(currentLocale);
otherSymbols.setGroupingSeparator('\'');
DecimalFormat formatter = new DecimalFormat("#,#0",otherSymbols);
//If you want to parse the String use
//formatter.format(Integer.parseInt("1564643"))
textview.setText(formatter.format(1564643));
答案 1 :(得分:2)
我将此类用于EditText。您可以使用其中一部分来解决您的问题。
public class NumberTextWatcherWithSeperator implements TextWatcher {
private EditText editText;
public NumberTextWatcherWithSeperator(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.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);
} catch (Exception ex) {
ex.printStackTrace();
editText.addTextChangedListener(this);
}
}
private 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();
}
StringBuilder str3 = new StringBuilder();
int i = 0;
int j = -1 + str1.length();
if (str1.charAt(-1 + str1.length()) == '.') {
j--;
str3 = new StringBuilder(".");
}
for (int k = j; ; k--) {
if (k < 0) {
if (str2.length() > 0)
str3.append(".").append(str2);
return str3.toString();
}
if (i == 2) {
str3.insert(0, "'");
i = 0;
}
str3.insert(0, str1.charAt(k));
i++;
}
}
}
并在您的活动中使用如下:
EditText editText = findViewById(R.id.et);
editText.addTextChangedListener(new NumberTextWatcherWithSeperator(editText));
答案 2 :(得分:0)
1.使用new DecimalFormat("##,##");
格式化
2.使用replaceAll(",", "'");
替换
3.使用setText
将文字设为TextView
试试这个。
DecimalFormat mFormat = new DecimalFormat("##,##");
String yourFormattedString = mFormat.format(1564643);
String result = yourFormattedString.replaceAll(",", "'");
Log.e("DecimalFormat", result);
textview.setText(result);
<强>输出强>
1'56'46'43