添加字符以获取ASCII值的目的是什么?

5


当测试以下代码时,char'a'的ASCII值为10char 'b'的ASCII值为11。然而,在连接char 'a'char 'b'时,结果是195

我的逻辑和/或理解中一定有错误...我确实知道char不能作为字符串连接,但是195的ASCII int值代表什么呢?

这样的结果有什么用途呢?


以下是我的代码:

public class Concatenated
{
    public static void main(String[] args)
    {
        char char1 = 'a';
        char char2 = 'b';

        String str1 = "abc";

        String result = "";
        int intResult = 0;
        Concatenated obj = new Concatenated();

        // calling methods here
        intResult = obj.getASCII(char1);
        System.out.println("The ASCII value of char \"" + char1 + "\" is: " + intResult + ".");

        intResult = obj.getASCII(char2);
        System.out.println("The ASCII value of char \"" + char2 + "\" is: " + intResult + ".");

        result = obj.concatChars(char1, char2);
        System.out.println(char1 + " + " + char2 + " = " + result + ".");

        result = obj.concatCharString(char1, str1);
        System.out.println("The char \"" + char1 + "\" + the String \"" + str1 + "\" = " + result + ".");
    } // end of main method

    public int getASCII(char testChar)
    {
        int ans = Character.getNumericValue(testChar);

        return ans;
    } // end of method getASCII

    public String concatChars(char firstChar, char secondChar)
    {
        String ans = "";
        ans += firstChar + secondChar; // "+=" is executed last

        return ans; // returns ASCII value
    } // end of method concatChars

    public String concatCharString(char firstChar, String str)
    {
        String ans = "";
        ans += firstChar + str;

        return ans;
    } // end of method concatCharString
} // end of class Concatenated

...结果将会被打印在屏幕上,其内容如下:

The ASCII value of char "a" is: 10.
The ASCII value of char "b" is: 11.
a + b = 195.
The char "a" + the String "abc" = aabc.



-- EDIT : --

正如@Marko Topolnik在下面指出的那样,方法getASCII应该更改为以下内容以返回正确的ASCII值(而不是UNICODE值):

public int getASCII(char testChar)
{
    // int ans = Character.getNumericValue(testChar); ...returns a UNICODE value!
    int ans = testChar;

    return ans;
} // end of method getASCII

我为了记录的缘故,没有修改上述代码。


你的方法命名不当。它并不是连接字符串,而是将值相加。 - user207421
啊,没错@EJP。感谢你指出了那个问题。不过我还没有改变我的代码,因为下面的一个答案引用了我的错误方法名concatChars,它应该被命名为类似于addChars的东西。 - Ian Campbell
2个回答

5
你正在调用错误的方法:getNumericValue会将字符解释为数字。例如,一个十六进制数字A的值为10。
相反,你应该直接使用你的字符值。例如,将其转换为int

谢谢@Marko!所以,我已经在方法getACII中更改了这一行——int ans = Character.getNumericValue(testChar); ...到——int ans = testChar;。这将产生与从concatChars方法返回的值有意义的结果——97 + 98 = 195。那么,195在ASCII中代表什么?获取这样的结果的目的是什么? - Ian Campbell
此外,有趣的是将 char 转换为 int 似乎是隐式的 -- int ans = testChar; 是正确的,而 int ans = int(testChar); 将会是错误的并且无法编译。 - Ian Campbell
1
JavaScript是你的第一语言吗?在Java中,转型的语法是(int)testChar。但是是的,在许多情况下,转型会被隐式地执行,因为它是一个“扩展”转型。 - Marko Topolnik
关于你在这里的第一条评论,public String concatChars(char firstChar, char secondChar) { return "" + firstChar + secondChar; }; - Marko Topolnik
啊,我括号写错了,谢谢你指出来,@Marko!是的,Javascript是我的第一语言。而且,可以通过空字符串将字符连接成字符串。 - Ian Campbell

3

Character.getNumericValue() 函数返回指定 Unicode 字符代表的 int 值。

根据 getNumericValue() 的 Javadocs: "大写和小写的 A 到 Z 字母都具有从 10 到 35 的数字值。这与 Unicode 规范无关,该规范不为这些 char 值分配数字值。"

然而,当你将它们添加到 concatChars() 方法中时,添加的两个值是 ASCII 值 (97 + 98)。


3
这是错误的解释。在Unicode中,所有ASCII字符具有完全相同的值。具体来说,Unicode代码点10绝对不是字符a - Marko Topolnik
我已经纠正了Unicode与ASCII的错误。除此之外,我不明白为什么我的答案是错误的。所以,请解释一下为什么会有负评和关于错误解释的评论。 - Dan D.
2
是的,现在可以取消踩了。然而,在回答还是错误的时候,它确实得到了5个不应该的赞。 - Marko Topolnik
感谢 @Dan 的帮助!那么,将字符的 UNICODE 或 ASCII 值相加有什么意义?这个总和与原始字符值有什么关系? - Ian Campbell
1
总和基本上没有什么意义,就像两个整数值的总和一样。 - Dan D.
显示剩余2条评论

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