如何将整数转换为base64(0-9A-Za-z) - java

我一直在尝试减少方式的长度。我在程序中表示一些整数ID。例如

2
3
15
26
63
...
151564852

我希望将它们表示为(仅0-9A-Za-z)

2
3
F
Q
z
...
vDF25a   //For example

我想到的方法是使用63个if语句,这些语句分别从0-63到0-z的每个映射以及64以上的任何值都对负63进行递归。

不用说,我认为我的方法非常有缺陷且不切实际。有什么更合适的方法呢?

更新:

按照fge的建议,我已经使编码器正常工作,但是我的解码功能仅适用于最多2个字符串,如果字符串较大,则总和会出错。例如,对于3840至3845,这是输出

// Encoded 
zw
x
zy
zz
100

// Decoded
3840
3841
3842
3843
124         //Invalid decoding

这是我的解码功能代码

public static int decode(String value)
{
    String revStr = new StringBuilder(value).reverse().toString();

    int sum = 0;



    for (int i=1; i < revStr.length(); i++)
    {
        for (int j=0; j < ALPHABET.length; j++)
        {
            if (ALPHABET[j] == revStr.charAt(i))
            {
                sum += (ALPHABET.length * j) * i;
                break;
            }
        }
    }

    for (int j=0; j < ALPHABET.length; j++)
    {
        if (ALPHABET[j] == revStr.charAt(0))
        {
            sum += j;
            break;
        }
    }

    return sum;
}

参考方案

这不是base64; base64编码二进制数据。

无论如何,您不需要大量的if语句;使用数组:

public final class AlphabetEncoder
{
    private static final char[] ALPHABET = { '0', '1', '2', ...., 'z' };
    private static final int ENCODE_LENGTH = ALPHABET.length;

    public static String encode(int victim)
    {
        final List<Character> list = new ArrayList<>();

        do {
            list.add(ALPHABET[victim % ENCODE_LENGTH]);
            victim /= ENCODE_LENGTH;
        } while (victim > 0);

        Collections.reverse(list);
        return new String(list.toArray(new char[list.size()],
            StandardCharsets.UTF_8);
    }

    public int decode(final String encoded)
    {
        int ret = 0;
        char c;
        for (int index = 0; index < encoded.length(); index++) {
            c = encoded.charAt(index);
            ret *= ENCODE_LENGTH;
            ret += Arrays.binarySearch(ALPHABET, c);
       }
       return ret;
    }
}

关于解码功能的注意事项:此处可以使用Arrays.binarySearch(),因为字母表具有自然排序的好属性(0 <1 <2 <... <z)。但是,可能应该添加一个测试,使其返回码不为负!

Java Regex挂在很长的字符串上 - java

我正在尝试编写一个REGEX来验证字符串。它应符合以下要求:仅包含大写和小写英文字母(a到z,A到Z)(ASCII:65到90、97到122)和/或数字0到9(ASCII:48到57)AND字符-_〜(ASCII:45、95、126)。前提是它们不是第一个或最后一个字符。它也可以具有角色。 (点,句号,句号)(ASCII:46),前提是它不是第一个或最后一个…

Java:我可以在Hashmaps中使用数组吗? - java

我可以在Hashmaps中使用数组吗?如果是这样,则声明这种哈希图的确切语法是什么?谢谢 参考方案 数组也是对象。甚至像int[]这样的原始数组。Map<String,String[]> map = new HashMap<String,String[]>();

Java:找到特定字符并获取子字符串 - java

我有一个字符串4.9.14_05_29_16_21,我只需要获取4.9。数字各不相同,所以我不能简单地获得此char数组的前三个元素。我必须找到最正确的.并将其子字符串化直到那里。我来自Python,因此我将展示Python的实现方法。def foobar(some_string): location = some_string.rfind('.&…

Java string.hashcode()提供不同的值 - java

我已经在这个问题上停留了几个小时。我已经注释掉所有代码,认为这与数组超出范围有关,但是这种情况仍在发生。我正在尝试使用扫描仪从文件中读取输入,存储数据并稍后使用哈希码获取该数据。但是哈希值不断变化。public static void main(String[] args) { //only prior code is to access data char…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)