0

私は単純な置換アプリを持っています。ユーザーは部分文字列に分割された文字列を入力し、各文字が数字に置き換えられます。

私が抱えている問題は、置換の最後のセットのみが処理されるか、少なくとも最初の 2 つが機能している場合、それらは null になり、「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);
4

2 に答える 2

6

String str0 = str.substring(0);位置 0 から始まり、元の文字列の末尾で終わる部分文字列を返します。したがって、あなたの場合、「a」と比較して「abc」が返されます。

代わりに使用できます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]));
于 2013-01-08T17:51:02.327 に答える
1

これにより、「a」と等しくない「abc」などの最初の文字からすべてが得られます

String str0 = str.substring(0);

あなたが意図したことは

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
于 2013-01-08T17:52:25.520 に答える