在java中,在第1、第4和第9个字符后加连字符

在java中,在第1、第4和第9个字符后加连字符,java,append,character,hyphen,Java,Append,Character,Hyphen,我被困在这两段代码中,找不到解决方案,也不明白为什么它不起作用 请在不更改方法返回类型的情况下帮助我 多谢各位 第1块://第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.leng

我被困在这两段代码中,找不到解决方案,也不明白为什么它不起作用

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

多谢各位

第1块://第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;
}
第二个block://无论我做什么,这个都会产生null。我在这件事上迷路了

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;
}

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

您正在将最后一个字符转换为字符,这将进行ASCII转换

如果查看,您会发现值0-8表示大多数控制台上无法打印的特殊字符,9是一个选项卡。这就是为什么你会看到一个?因为控制台不知道如何打印字符

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

请注意,如果您使用的是char,而您可以使用String,那么您将很难调试问题

注意:尽管有更好的方法可以达到同样的效果,但这将通过最少的更改解决第二个问题


但你的第一个问题是什么?仍然存在。这取决于你想用什么作为isbn中的最后一个字符。首先,你可以做charSum=charlast+A;把它带到阿尔法范围。

你能告诉我如何解决这些问题吗?我查过了。非常感谢。第二个街区肯定是固定的。第一个尚未修复,因为我根本不知道ASCII表。我的目标是让它产生数字0到9,或者如果余数是10,则产生“X”。例如,结果可能看起来像“1-245-63299-X”或“1-245-63299-0-9”。你能再帮我一次吗在这种情况下,do charSum=char last+'0';在else块的方法中,10位ISBN代码是564652178/连字符ISBN代码是5-646-52178-/无论我做什么,最后一个字符总是这个正斜杠。我不明白。
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;
}