Java-多个if语句,但只对最后一个执行操作

Java-多个if语句,但只对最后一个执行操作,java,if-statement,string-substitution,Java,If Statement,String Substitution,我有一个简单的替换应用程序,用户输入一个被分成子字符串的字符串,然后用每个字符替换一个数字 我遇到的问题是,只有最后一组替换被执行,或者至少如果前两个正在工作,那么它们将被置零并返回“0” 所以对于“abc”的输入,我需要一个“123”的输出,但是我得到了“003”,或者如果输入是“bcd”,那么输出应该是“234”,但是我得到了“004” 我哪里做错了 JButton button_1 = new JButton("Substitute"); button_1.addActionListene

我有一个简单的替换应用程序,用户输入一个被分成子字符串的字符串,然后用每个字符替换一个数字

我遇到的问题是,只有最后一组替换被执行,或者至少如果前两个正在工作,那么它们将被置零并返回“0”

所以对于“abc”的输入,我需要一个“123”的输出,但是我得到了“003”,或者如果输入是“bcd”,那么输出应该是“234”,但是我得到了“004”

我哪里做错了

JButton button_1 = new JButton("Substitute");
button_1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {

    String str = textField_1.getText();

    String str0 = str.substring(0);
    int val1 = 0;
        if (str0.equalsIgnoreCase("a")) { val1 += 1; }
        if (str0.equalsIgnoreCase("b")) { val1 += 2; }
        if (str0.equalsIgnoreCase("c")) { val1 += 3; }
        if (str0.equalsIgnoreCase("d")) { val1 += 4; }

    String str1 = str.substring(1);
    int val2 = 0;
        if (str1.equalsIgnoreCase("a")) { val2 += 1; }
        if (str1.equalsIgnoreCase("b")) { val2 += 2; }
        if (str1.equalsIgnoreCase("c")) { val2 += 3; }
        if (str1.equalsIgnoreCase("d")) { val2 += 4; }

    String str2 = str.substring(2);
    int val3 = 0;
        if (str2.equalsIgnoreCase("a")) { val3 += 1; }
        if (str2.equalsIgnoreCase("b")) { val3 += 2; }
        if (str2.equalsIgnoreCase("c")) { val3 += 3; }
        if (str2.equalsIgnoreCase("d")) { val3 += 4; }

    textField_2.setText(""+Integer.toString(val1)+(val2)+(val3));
    }
});
button_1.setBounds(315, 50, 90, 25);
panel.add(button_1);

String str0=str.substring(0)返回一个子字符串,该子字符串从位置0开始,在原始字符串的末尾结束。因此,在您的例子中,它返回“abc”,您可以将其与“a”进行比较

您可以使用
String str0=str.substring(0,1)取而代之

或者如注释所示,您可以单独查看每个字符:

String str = textField_1.getText();

int[] vals = new int[3];

//you should check that your string is at least 3 characters long
String lower = str.toLowerCase(); //no need to equalsIgnorCase any more
for (int i = 0; i < 3; i++) { //loop over the first 3 characters
    char c = lower.charAt(i);
    if (c >= 'a' && c <= 'd') vals[i] = c - 'a' + 1; //populate the array
}
textField_2.setText("" + Integer.toString(vals[0]) + (vals[1]) + (vals[2]));
String str=textField_1.getText();
int[]VAL=新的int[3];
//您应该检查字符串长度是否至少为3个字符
String lower=str.toLowerCase()//再也不需要等信号了
对于(int i=0;i<3;i++){//在前3个字符上循环
char c=较低的charAt(i);

如果(c>='a'&&c这将提供从第一个字符开始的所有内容,例如“abc”,它将不等于“a”

你的意图可能已经实现了

String str0 = str.substring(0, 1);
顺便说一句,做同样事情的方法更简单

String str = "abc";
StringBuilder sb = new StringBuilder();
for (char ch : str.toCharArray())
    sb.append(ch % 32);
System.out.println(sb.toString());
印刷品

123

既然要比较单个字符,为什么不直接使用
.charAt()呢
?@Melnocholson它对a-d和a-d做了同样的事情。它还将为其他字母生成数字,这些数字可以根据需要忽略。@PeterLawrey这些其他数字很容易被认为是不正确的,而不是可忽略的,特别是考虑到它们通常在目标字符串中包含两位数字。鉴于问题的级别在我看来有必要提出警告。
123