如何打印字符值?

时间:2013-10-03 03:42:50

标签: java

public static String convertPNumber(String p) {
    String b;
    for (int i = 0; i < p.length(); i++) {
        char a = p.charAt(i);
        if (!Character.isDigit(a)) {
            if (a == 'A' || a == 'B' || a == 'C') {
                b = "2";
            }
        } else {
            b = a;
        }
    }
    return b;
}

public static void main(String args[]) {
    convertPNumber("AB2");
}

如果字符是数字,我希望它打印数字,但由于该方法是公共静态字符串,它表示当b = a时需要字符串;它找到了char。

2 个答案:

答案 0 :(得分:3)

b是一种Stringachar的一种类型。您无法将char等原语分配给String

可以做的是使用Character.toString(char value)代替:

b = Character.toString(a);

我也注意到你的程序中存在一些缺陷......但是我会留下主要的逻辑问题来解决。

当您解决上述问题时,有可能未执行for语句,因此可能无法初始化变量b。您可以通过将b初始化为null来解决此问题。

你的逻辑很不寻常 - 你只关注String中的最后一个角色,而我并不完全确定你想要的是什么。想想我会为你指出这一点。

答案 1 :(得分:0)

您正在捕获字符串中的每个字符,并将其转换为另一个字符。但是,你根本不把这些角色放在一起。一种方法是使用StringBuilder类,但不一定是最有效的方法。该类被设计为可变String

我不会写最里面的方法,但这是一个开始。

public class ABTranslator {
    public String translate(String before) {
        StringBuilder b = new StringBuilder();
        for (int i = 0, length = before.length(); i < length; i++) {
            char a = before.charAt(i);
            b.append(convert(a));
        }
        return b.toString();
    }

    public char convert(char before) {
        // You write this.
    }
}

您可以使用正则表达式代替上面的if代码。

现在,编写一组JUnit测试来检查您的方法是否正确:

//In ABTranslatorTest.java

@Before
public void initTranslator() {
    this.translator = new ABTranslator();
}

@Test
public void digitsAreConvertedToThemselves() {
    Assert.assertEquals('3', translator.convert('3');
}

@Test
public void mostCharsAreConvertedToThemselves() {
    Assert.assertEquals('X', translator.convert('X');
}

@Test
public void ABCAreConvertedToTwo() {
    Assert.assertEquals('B', translator.convert('2');
}

@Test
public void WordsAreConvertedAsCharactersAre() {
    Assert.assertEquals("222", translator.translate("AB2");
}

完成所有这些工作。从您的同事那里了解如何设置JUnit 4.11。请注意,我使所有方法都是非静态的。如果您没有相关经验,请编写主方法。不过,这应该是您唯一的static方法。