将字母数字转换为ASCII并递增

4

我被如何将3个字母和3个数字转换为ASCII并递增它们困扰着...这是一个老问题,下一个车牌的问题。有没有人能给我指点一下方向?

7个回答

2
这个问题实际上有真正的应用。我写了一个类似于此的账号生成器。我已经按照你的格式进行了修改。给你这里。
public class LicenseNumber {

    int numericSum;
    int letterSum;

    public LicenseNumber() {
        numericSum = letterSum = 0;
    }

    public LicenseNumber(String number) {
        if (!number.matches("^[A-Za-z]{3}[0-9]{3}$"))
            throw new IllegalArgumentException("Number doesn't match license format");
        numericSum = Integer.valueOf(number.substring(3));
        letterSum = value(number, 0) * 26 * 26 + value(number, 1) * 26 + 
           value(number, 2);
    }

    public void increment() {
        increment(1);
    }

    public void increment(int inc) {
        numericSum += inc;
        if (numericSum >= 1000) {
            letterSum += numericSum/1000;
            numericSum %= 1000;         
        }
    }

    public String toString() {
        char[] letters = new char[3];
        int n = letterSum;
        for (int i = 0; i < 3; i++) {
            letters[2-i] = (char)('A' + (n%26));
            n /= 26;
        }
        return new String(letters) + String.format("%03d", numericSum);
    }

    private int value(String s, int index) {
        return Character.toUpperCase(s.charAt(index)) - 'A';
    }

/**
     * Example
     */
    public static void main(String[] args) {

        LicenseNumber lic = new LicenseNumber("ABC999");
        for (int i=0; i < 100; i++) {
            lic.increment(500);
            System.out.println(lic);
        }
    }

}

1
String str = "abc123"
String newstr = "";
for(int i=0; i<str.length(); i++) {
    newstr += (char) (str.charAt(i) + 1);
}
// newstr now is "bcd234"

请注意,这种方法无法按照您所期望的方式处理字符'z'、'Z'或'9'。但它应该可以为您提供一个起点。
另外请注意,使用 StringBuilder 创建 newstr 会更加高效。

0

我猜,

  char c='A';
  int no=97;
  System.out.println( (++c) + " " + (char)++no);

0
生成车牌号的一种简单方法是使用一个整数变量进行递增,并使用三个整数变量对应字母,类似于这样,请根据需要进行修改。一个技巧是使用String.format函数,它可以无缝地在整数和字符之间进行转换(也可以使用强制类型转换)。
class plateGenerator {
    int minLetter = "A".charAt(0);
    int maxLetter = "Z".charAt(0);
    int curLetter1 = minLetter;
    int curLetter2 = minLetter;
    int curLetter3 = minLetter;
    int number = 0;

    public String generatePlate() {
        String plate = String.format("%c%c%c-%03d",curLetter1,
                                curLetter2,curLetter3,number);
        increment();
        return plate;
    }
    private void increment() {
        number++;
        if (number == 1000) {
            number = 0;
            curLetter1++;
        }
        if (curLetter1 > maxLetter) {
            curLetter1 = minLetter;
            curLetter2++;
        }
        if (curLetter2 > maxLetter) {
            curLetter2 = minLetter;
            curLetter3++;
        }
        if (curLetter3 > maxLetter) {
            curLetter3 = minLetter;
            number++;
        }
    }

    public static void main(String[] args) {
        plateGenerator pg = new plateGenerator();
        for (int i = 0; i < 50000; i++) {
            System.out.println(pg.generatePlate());
        }
    }

}

0

我还没有看到任何关于增加字母数字字符串的通用解决方案的代码示例,所以我想发布我的。

这个函数接受任意长度和任意顺序的字母数字字符组成的字符串,将它们转换为大写,并按照类似于26进制的方式递增1。如果数字超出范围,它也会抛出异常。是否进行数字循环取决于您自己的需求...

private static string IncrementAlphaNumericString(string alphaNumericString)
{
    char[] an = alphaNumericString.ToCharArray();

    int i = an.Length - 1;
    while (true)
    {
        if (i <= 0)
            throw new Exception("Maxed out number!!!");

        an[i]++;

        if (an[i] - 1 == '9')
        {
            an[i] = 'A';
        }

        if (an[i] - 1 == 'Z')
        {
            an[i] = '0';
            i--;
            continue;
        }

        return new string(an);
    }
}

0
你可以通过将包含字母和数字的字符串转换为字符数组char[]来实现这一点。一旦完成转换,你就可以遍历该数组并对每个元素执行++操作。

0
你正在创建像这样的字符串:"AAA000","AAA001",...,"AAA999","AAB000",...,"ZZZ999",对吗?
把它想象成一个数字系统,其中不同的列不使用相同数量的数字。所以我们的数字是10-10-10-10,而你的数字是26-26-26-10-10-10。使用一个底层整数进行递增,然后通过连续除以和取模来转换为字母和数字,分别为10、10、10、26、26、26。
要将车牌转换为其底层整数,请将字母位置(A == 0,B == 1等)乘以26的适当幂,并将数字乘以10的适当幂,然后将它们全部加在一起。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接