从j获取注册算法

2024-10-16 17:24:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道一个算法是否已经在pythonjwt中注册,因为我的应用程序在尝试两次时会抛出一个错误。在

我尝试在运行时注册ES256,作为解决从PyJWT0.3.0升级到{}后引发的异常的解决方法:

jwt.register_algorithm(ALGO_ES256, ECAlgorithm(ECAlgorithm.SHA256))

这个很好用。现在,我必须调用脚本,在这种情况下发生多次,并得到一个异常,即我不能注册两次。在

在注册新值之前,我考虑过评估已经注册的值,发现算法包含在:

^{pr2}$

如何访问全局对象? 我想做些类似的事情:

if ALGO_ES256 not in jwt.api._jwt_global_obj:
    jwt.register_algorithm(ALGO_ES256, ECAlgorithm(ECAlgorithm.SHA256))

但它一直告诉我找不到api的参考


Tags: 方法脚本算法registerapi应用程序错误jwt
4条回答

使用以下命令:

String cap = str.substring(0, 1).toUpperCase() + str.substring(1);

如果在第二个内部,则更换

Character.isLetter(i - 1)

Character.isLetter(x.charAt(i - 1))

这应该可以做到,我用空格将字符串拆分成一个数组(这样我就可以知道每个字符串在哪里大写),使用toUpperCase()substring将数组中的每个字符串大写,然后返回重新组合的字符串

public class Capitalize 
{

    static String capitalizeString(String x) 
    {

        String[] splitString = x.split(" "); // Splits the string.
        x = "";
        for (int i = 0; i < splitString.length; i++)
            if (splitString[i].length() > 1)
                x += splitString.substring(0,1).toUpperCase() + splitString.substring(1) + " ";
            else
                x += splitString.substring(0,1).toUpperCase() + " ";
        return x;
    }
}

识别问题

此部件代码会导致以下问题:

if (Character.isLetter(i - 1)) {
    char ch = x.charAt(i);
    completedConversion = completedConversion + ch;
} else {
    char ch = x.charAt(i);
    ch = Character.toUpperCase(ch);
    completedConversion = completedConversion + ch;
}

首先,当传递的转换为字符(使用代码点)的参数是字母字符时,带有类型为int的参数的方法Character.isLetter()返回true。因此,对于相当多的初始迭代,您将得到一个false。如果Character.isLetter()返回false,那么您还是要将一个leter改为大写

获取实际字符

我认为应该有:

if (Character.isLetter(x.charAt(i - 1))) { //added getting character from input String
    char ch = x.charAt(i);
    completedConversion = completedConversion + ch;
} else {
    char ch = x.charAt(i);
    ch = Character.toUpperCase(ch);
    completedConversion = completedConversion + ch;
}

使用isWhitespace()而不是isLetter()

更好的方法是:使用isWhitespace()方法。它将防止出现数字位于单词内部的情况(数字后面的字符也将是大写)

if (!Character.isWhitespace(x.charAt(i - 1))) {
    //if previous char is not a whitespace don't change case
    char ch = x.charAt(i);
    completedConversion = completedConversion + ch;
} else {
    //if previous char is a whitespace change to uppercase
    char ch = x.charAt(i);
    ch = Character.toUpperCase(ch);
    completedConversion = completedConversion + ch;
}

然后,空格、制表符等后面的所有字符都将是大写

使用StringBuilder

将所有这些放在一起,再加上使用StringBuilder避免创建许多临时字符串,将是:

static String capitalizeString(String x) {
    StringBuilder completedConversion = new StringBuilder();

    for (int i = 0; i < x.length(); i++) {
        if (i == 0) {
            char ch = x.charAt(i);
            ch = Character.toUpperCase(ch);
            completedConversion.append(ch);
            i++;
        }

        if (!Character.isWhitespace(x.charAt(i - 1))) {
            char ch = x.charAt(i);
            completedConversion.append(ch);
        } else {
            char ch = x.charAt(i);
            ch = Character.toUpperCase(ch);
            completedConversion.append(ch);
        }

    }

    return completedConversion.toString();
}

相关问题 更多 >