在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
答案 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是一个布尔标记,可以防止无限循环。