【问题标题】:How to assign int values to char in Java? [closed]如何在 Java 中将 int 值分配给 char? [关闭]
【发布时间】:2021-01-17 02:15:49
【问题描述】:

美好的一天,我对 Java 还很陌生,想知道如何为字母提供对应的 int 值,如下图所示。目前我正在做的一个项目坚持这个。例如,当用户输入 ABC 时,输出为 321,因为它要求它是反向的。

this image here

【问题讨论】:

标签: java project


【解决方案1】:

这可行:

public class Test {

    public static void main(String args[]) throws Exception {

        String str = "ABC";
        StringBuilder sb = new StringBuilder();
        for (char c : str.toCharArray())
            sb.append((int)c-64);

        System.out.println(sb.reverse());
    }


}

【讨论】:

    【解决方案2】:

    循环 Unicode 代码点

    获取字符串中每个字符的Unicodecode point编号。

    通过调用String#codePointCount获取代码点数。

    然后通过调用String#codePointAt 循环每个代码点。请注意,我们必须使用烦人的从零开始的计数,而不是序数,这是从编程早期开始就非常常见且不幸的保留习惯。

    String input = "Hi?" ;
    int countCodePoints = input.codePointCount( 0 , input.length()  ) ;
    for( int i = 0 ; i < countCodePoints ; i ++ )
    {
        System.out.println( "i: " + i + " | " + input.codePointAt( i ) ) ;
    }
    

    看到这个code run live at IdeOne.com

    i: 0 | 72
    i: 1 | 105
    i: 2 | 128512
    

    避免char

    不幸的是,此页面上的其他答案使用 char 类型。该类型现在是 legacy,可以追溯到 Java 的原始版本。

    该类型已过时,因为它甚至无法处理 Unicode 中定义的 143,859 个字符中的一半。为了好玩,运行这段代码来看看当我们使用char 类型来查看上面看到的相同输入字符串时会发生什么:"Hi?".chars().forEach( c -&gt; System.out.println( c ) )

    您的解决方案

    回到您输入文本的具体示例:

    String input = "ABC" ; 
    int countCodePoints = input.codePointCount( 0 , input.length()  ) ;
    for( int i = 0 ; i < countCodePoints ; i ++ )
    {
        System.out.println( "i: " + i + " | " + input.codePointAt( i ) ) ;
    }
    

    运行时:

    i: 0 | 65
    i: 1 | 66
    i: 2 | 67
    

    既然是作业,那我就把减法和倒数的工作留给你。

    补充阅读:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!).

    【讨论】:

      【解决方案3】:

      遍历每个字符(反向)并获得 ASCII 值(参考这个问题:https://stackoverflow.com/a/16458580)。然后根据 ASCII 减去它的值(参考此表:https://www.ascii-code.com/)。我建议对输入进行清理,以便字母只能是大写或小写(不过取决于您的要求)。

      【讨论】:

        【解决方案4】:

        最简单/最快的方法是使用switch 语句。例如,

        public static int charToInt(char c) {
            switch(c) {
                case 'A':
                    return 1;
                case 'B':
                    return 2;
                //...
            }
        }
        

        您可以使用类似于此的方法原型为反向创建类似的功能:

        public static char intToChar(int i)

        要将 String 转换为字符数组 (char[]),请使用方法 String.toCharArray。获得char[] arr 后,使用arr.length 获取数组的大小。使用该大小创建一个长度相同的整数数组 (int[]),您可以循环遍历字符数组并使用自定义转换方法将它们转换为整数。

        【讨论】:

          【解决方案5】:

          我建议Map&lt;Character, Integer&gt;。您可以将 Integer 值分配给 Characters,并且始终可以使用 Map 接口中的简单 getValue() 方法获取它。

          【讨论】:

            猜你喜欢
            • 2023-02-22
            • 2021-12-17
            • 2023-03-26
            • 2012-12-10
            • 1970-01-01
            • 2018-02-03
            • 2016-04-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多