Java子字符串返回0
我正在开发一个命理学应用程序。。哪里有三个编辑文本用于收集用户的名字、中间名和姓氏。。在这些值中,只取名称的第一位数字,所有这些值都使用字符串生成器追加。。并显示计算结果。。如果用户输入所有的名字、中间名和姓氏,并且对于某些人来说没有中间名,那么当他们进行计算时,应用程序工作正常,就像应用程序崩溃一样。。请帮忙,我正在输入下面的代码 MainActivity.javaJava子字符串返回0,java,android,stringbuilder,Java,Android,Stringbuilder,我正在开发一个命理学应用程序。。哪里有三个编辑文本用于收集用户的名字、中间名和姓氏。。在这些值中,只取名称的第一位数字,所有这些值都使用字符串生成器追加。。并显示计算结果。。如果用户输入所有的名字、中间名和姓氏,并且对于某些人来说没有中间名,那么当他们进行计算时,应用程序工作正常,就像应用程序崩溃一样。。请帮忙,我正在输入下面的代码 MainActivity.java @Override protected void onCreate(Bundle savedInstanceState)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void gReport(View V)
{
EditText et1 = (EditText) findViewById (R.id.editText1);
EditText et2 = (EditText) findViewById (R.id.editText2);
EditText et3 = (EditText) findViewById (R.id.editText3);
TextView tv1 = (TextView) findViewById (R.id.textView1);
long sum2 = 0;
String firstName = et1.getText().toString();
String middleName = et2.getText().toString();
String lastName = et3.getText().toString();
String aChar1 = firstName.substring(0,1);
String aChar2 = middleName.substring(0,1);
String aChar3 = lastName.substring(0,1);
StringBuilder sb= new StringBuilder();
sb.append(aChar1);
sb.append(aChar2);
sb.append(aChar3);
String aChar = sb.toString();
sum2 = getSum(String.valueOf(aChar));
tv1.setText(String.valueOf(aChar));
Intent in = new Intent(this, FirstActivity.class);
in.putExtra("name2",sum2 + "");
startActivity(in);
}
private long getSum(String text) {
// TODO Auto-generated method stub
long sum2 = 0;
char[] name2 = new char[text.length()];
name2 = text.toCharArray();
for(int i=0; i<text.length(); i++)
{
sum2 += value2( name2[i] );
}
while (sum2>9)
{
sum2 = findDigitSum2(sum2);
}
return sum2;
}
private long findDigitSum2(long n) {
// TODO Auto-generated method stub
int sum2=0;
while (n != 0)
{
sum2 += n % 10;
n = n / 10;
}
return sum2;
}
private long value2(char a) {
// TODO Auto-generated method stub
switch(a)
{
case 'A':return 1;
case 'B':return 2;
case 'C':return 3;
case 'D':return 4;
case 'E':return 5;
case 'F':return 6;
case 'G':return 7;
case 'H':return 8;
case 'I':return 9;
case 'J':return 1;
case 'K':return 2;
case 'L':return 3;
case 'M':return 4;
case 'N':return 5;
case 'O':return 6;
case 'P':return 7;
case 'Q':return 8;
case 'R':return 9;
case 'S':return 1;
case 'T':return 2;
case 'U':return 3;
case 'V':return 4;
case 'W':return 5;
case 'X':return 6;
case 'Y':return 7;
case 'Z':return 8;
default:return 0;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.firstactivity_xm);
TextView tv2 = (TextView) findViewById (R.id.textView2);
tv2.setText(getIntent().getStringExtra("name2"));
}
}
它可能会崩溃,因为中间名字段为空,长度为0,并且您正试图从不存在的索引中获取字符。 在使用substring方法之前,可以使用isEmpty()检查middleName字符串是否为空或至少有1个字符 例如:
String aChar2 = "";
if (!middleName.isEmpty())
{
aChar2 = middleName.subString(0,1);
}
可能是因为以下几行:
String aChar2 = middleName.substring(0,1);
如果middleName为空,则会引发IndexOutOfBoundsException(请参阅
捕获此异常或更好的方法是,在执行子字符串之前检查字符串是否为空。堆栈跟踪会有所帮助。“我正在开发一个命理学应用程序…”-这是你的错误:-)请给出一个示例字符串aChar2=“”;if(!middleName.isEmpty()){aChar2=middleName.subString(0,1);)String aChar1=“”;if(!firstName.isEmpty()){aChar1=firstName.subString(0,1);}else{}这是正确的,但你不需要其他,因为你在其他方面什么都不做,所以你可以删除它。请调试一点,你现在知道这个理论,你应该能够弄清楚它。而且“现在它不工作”不是描述你的问题的合适方式。什么不工作?你哪里出错了?