我已经设置了一个带有一个编辑文本框的对话框。我使用了一个集合过滤器来获得最大数量的结构,但是我没有看到最小的过滤器。如果用户输入少于8个字符,我添加了代码以在输入的文本中添加“x”。代码编译但崩溃。 并抛出错误是“字符串长于9”。并给出(16为piece.length())。可以使用一些帮助解决
public void onClick(View item) {
final EditText input = new EditText(this);
switch (item.getId()) {
case R.id.textView1:
strEditText = Title1.getText().toString(); // OK
input.setText(strEditText);
input.setFilters(new InputFilter[] { new InputFilter.LengthFilter(8) }); // Set max # of charactures for Input
for (int i = 0; i < strEditText.length(); i++) { //
String piece = strEditText; //
String toBeAdded = ""; //
if (piece.length() < 8) {
int length = piece.length();
toBeAdded = piece;
while (length < 8) {
toBeAdded = toBeAdded + "X";
length++;
}
} else if (piece.length() > 8) {
throw new IllegalArgumentException("Error, string longer than 9");
} else {
toBeAdded = piece;
}
strEditText = strEditText + toBeAdded;
}// return to for-loop //
new AlertDialog.Builder(ElsEditTitles.this)
.setTitle("Ttile").setView(input).setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
strReturn = input.getText().toString();
Title1.setText(strReturn);
}
}).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Do nothing.
}
}).show();
break;
答案 0 :(得分:0)
我不明白为什么你这样做:for(int i = 0; i&lt; strEditText.length(); i ++)
例如,如果EditText为'abc',则strEditText为'abc',重复为3时间。 在第一次toBeAdded ='abcXXXXX'和代码“strEditText = strEditText + toBeAdded;”运行strEditText ='abcabcXXXXX',当那个进入第二个循环时,它已经超过8个字符并抛出你的错误。
抱歉我的英文不好..