将int数组中的数字改为字母,并在java中返回字符串

tcbh2hod  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(428)

我有一个 int array (b[]) 具有随机长度和随机整数。我想让小于9的整数保持原样,我想改变数字 9-35 写信 A-Z . 我想把 () 所有数字都高于 35 . 所以呢 b[] = {1,10,36} 会产生 String 1A(36) . 我的尝试:

int b[] = {99, 2, 3, 4, 5, 10, 35, 24};  //sample input
char[] hilfsarray = new char[b.length];
char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVW".toCharArray();

for (int k = 0; k < hilfsarray.length; k++) //overwrite all positons with *
    hilfsarray[k] = '*';

for (int i = 0; i < b.length; i++) {
    int p = b[0] - 10;
    if (b[i] < 9 && b[i] <= 35) {
        hilfsarray[i] = alphabet[p];
    }
    return Arrays.toString(hilfsarray);
}
rseugnpd

rseugnpd1#

我想这个代码可以胜任你的工作。它使用java-8、streamapi:

public String someMethod() {
    int[] items = {99, 2, 3, 4, 5, 10, 35, 24}; // sample input
    String[] alphabet =
            "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z".split(",");

    return Arrays.stream(items)
            .mapToObj(item -> (item > 9 && item <= 35) ?
                    alphabet[item - 10] : "(" + item + ")")
            .reduce("", String::concat);
}

样本输出:

(99)(2)(3)(4)(5)AZO
9njqaruj

9njqaruj2#

你可以解释范围内的数字 10-35 作为字符并按 55 获取大写字母的代码点 65-90 :

public static void main(String[] args) {
    int[] a = {1, 10, 36};
    int[] b = {99, 2, 3, 4, 5, 10, 35, 24};

    System.out.println(custom(a)); // 1A(36)
    System.out.println(custom(b)); // (99)2345AZO
}
public static String custom(int[] arr) {
    return Arrays.stream(arr).mapToObj(i -> {
        if (i > 9 && i < 36)
            return Character.toString(i + 55);
        else if (i > 35)
            return "(" + i + ")";
        else
            return String.valueOf(i);
    }).collect(Collectors.joining());
}

另请参见:替换字符串中的非ascii字符

相关问题