在java中的第1个,第4个和第9个字符后面加上连字符

时间:2015-08-05 04:38:38

标签: java append character hyphen

我坚持使用这两个代码块,我找不到解决方案或弄清楚它为什么不起作用。

请在不更改方法返回类型的情况下帮助我。

非常感谢。

第一个阻止://第10个数字应该是X或其余部分,但是输出'?'。

public static char getCheckSum(String isbn) {
    int sum = 0;
    char charSum;

    for (int i = 0; i < isbn.length(); i++) {
        int[] num = new int[isbn.length()]; 
        num[i] = Character.getNumericValue(i) * (i+1);
        sum = sum + num[i];
    }

    int last = sum % 11;

    if (last == 10){
        charSum = 'X';
    } else {
        charSum = (char) last;
    }

    return charSum;
}

第二块://无论我做什么,这个都会产生空值。我迷失了这个。

public static String formatISBNWithHyphens(String isbn) {
    // original isbn:  123456789
    // new isbn :      1-234-56789-X
    char isbn10 = getCheckSum(isbn);// this method get sum and put 10th char in isbn


    String isbn10Str = Character.toString(isbn10);
    char[] c = new char[isbn10Str.length()];
    String[] cStr = new String[isbn.length()];
    String isbnStr = null;

    for (int i = 0; i < isbn10Str.length(); i++){
        c[i] = isbn10Str.charAt(i);
        if (i == 0 || i == 3 || i == 8 ) {
            c[i] += '-';
         }
         cStr[i] = Character.toString(c[i]);
         isbnStr += cStr[i];
    }

    return isbnStr;
}

1 个答案:

答案 0 :(得分:1)

在第一种情况下,last的值可以来自0 - 9(如果不是10)。

您正在将last转换为字符,进行ASCII转换。

如果您查看ASCII table,您会发现值0 - 8代表无法在大多数控制台上打印的特殊字符(并且9是一个标签页)。这就是为什么你看到?,因为控制台不知道如何打印字符。

在第二种情况下,您正在执行isbnStr += cStr[i],当isbnStr为空时,它实际上是isbnStr = "null" + cStr[i]。而且很可能你的cStr[i]是一个看不见的角色。这就是为什么你只在返回字符串中看到null

请注意,如果您在使用char时使用String,则最终难以调试问题。

public static String formatISBNWithHyphens(String isbn) {
    // original isbn:  123456789
    // new isbn :      1-234-56789-X
    char isbn10 = getCheckSum(isbn);// this method get sum and put 10th char in isbn


    String isbn10Str = isbn + Character.toString(isbn10); // Edit: You want the whole ISBN, not just the last char.
    String[] cStr = new String[isbn.length()];
    String isbnStr = ""; // EDIT: Initialize to empty string instead of null

    for (int i = 0; i < isbn10Str.length(); i++){
        cStr[i] = Character.toString(isbn10Str.charAt(i));
        if (i == 0 || i == 3 || i == 8 ) {
            cStr[i] += "-"; // Edit: Adding a char to another char will result in a different char. Not a concatenated string. So use Strings instead.
         }

         isbnStr += cStr[i];
    }
    return isbnStr;
}

注意:这将以最小的更改修复您的第二个问题(尽管有更好的方法可以实现相同的结果)。

但是?的第一个问题仍然存在。这取决于你想用什么作为isbn中的最后一个字符。首先,你可以charSum = (char) (last + 'A');为它带来alpha范围。