如何将字符映射到java中的数字位置?

Ale*_*ski 9 java

例如

  • 输入:['A','Z','F','D',...]
  • 输出:[0,25,5,3,...]

在C中,我只是从'A'中减去char,但我似乎无法在java中执行此操作.

Eta*_*oin 24

indexOf在String对象上使用该方法.例如,

"ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf('F')

返回5.

  • 如果你不需要范围检查,'F' - 'A'会更快. (3认同)

jar*_*bjo 13

您也可以使用Java中的字符进行简单的数学运算:

    System.out.println('A' - 'A');
Run Code Online (Sandbox Code Playgroud)

将输出0.

  • @Stefan--整个问题(由OP提出)是脆弱的."角色的数字位置"的概念加载了关于字符集的假设,关于什么是有效字符的假设等等.请记住,他来自C背景...... (4认同)
  • 请注意,那些必须是字符,而不是字符串.单引号很重要. (3认同)
  • “这将为域外的字符返回假值。”。C等效语言也将如此。 (2认同)
  • @Stefan,这是明确定义的... Java使用UTF-16字符,字母'A'...'Z'在ASCII兼容范围内. (2认同)

K.B*_*rad 5

实际上,其他解决方案的弱点在于它们涉及字符串创建

public enum 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
}
Run Code Online (Sandbox Code Playgroud)

您现在可以使用序数函数来获取此处的偏移量.例如Alphabet.L.ordinal();

但是,由于我假设您正在处理函数,因此这是一个更有用的定义

public enum 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;

    public static int getNum(String targ) {
        return valueOf(targ).ordinal();
    }

    public static int getNum(char targ) {
        return valueOf(String.valueOf(targ)).ordinal();
    }    
}
Run Code Online (Sandbox Code Playgroud)

注意:与其他语言不同,您可以在它自己的文件中声明枚举,就像类一样.实际上,如上所示的枚举也可以包含字段和方法,这些字段是静态创建的,并且很难打破.事实上,使用仅有局部的方法和变量,并呼吁实例中的一个枚举类型的枚举的是创建一个单身,因为它是牢不可破的,即使通过反射的推荐方式.

如果您不控制对函数的调用,您可能还想考虑在那里滑动toUppercase()调用

如果您希望更动态地创建字母而不是使用预定义的字母表,那么您应该查看地图