Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从字符串中接收数学符号,并从Java中的ASCII中获取其Dec值?_Java_String_Encode - Fatal编程技术网

如何从字符串中接收数学符号,并从Java中的ASCII中获取其Dec值?

如何从字符串中接收数学符号,并从Java中的ASCII中获取其Dec值?,java,string,encode,Java,String,Encode,我正在做一个小项目,可以帮助我拿一根绳子,例如“7 Si PARPADRE”∈{8,9}“并识别数学符号,例如。”∈" 并在ASCII表中获取十进制值 但当我检查反字符串时,IDE只将符号解析为“?”字符 我用这个密码试过了 byte[] text = scanner.nextLine().getBytes(US_ASCII); String string = new String(text, US_ASCII); 我尝试了所有可用的Standarchersets,但这不起作用 我的目标是将c

我正在做一个小项目,可以帮助我拿一根绳子,例如“7 Si PARPADRE”∈{8,9}“并识别数学符号,例如。”∈" 并在ASCII表中获取十进制值

但当我检查反字符串时,IDE只将符号解析为“?”字符

我用这个密码试过了

byte[] text = scanner.nextLine().getBytes(US_ASCII);
String string = new String(text, US_ASCII);
我尝试了所有可用的Standarchersets,但这不起作用

我的目标是将char变量设置为:∈“稍后获取dec值,例如8714


谢谢,并向您致意。

要获取字符串中“字符”的代码点值,请给出其UTF-16代码单元位置

"∈".codePointAt(0)
它必须来自字符串,因为char(Character)是一个UTF-16代码单元,其中一个或两个表示Unicode码点。例如:

"
is Unicode Character 'ELEMENT OF' (U+2208) (decimal 8712)1, which means that its character code is
0x2208
, and it is certainly not an ASCII character.

1)
should not be confused with
Unicode Character 'SMALL ELEMENT OF' (U+220A) (decimal 8714).

To get the UTF-16 character code in Java, call
charAt()
and cast/assign to
int
.

String string = scanner.nextLine();
for (int i = 0; i < string.length(); i++) {
    System.out.println((int) string.charAt(i));
}
是(十进制8712)1,这意味着它的字符代码是
0x2208
,当然不是ASCII字符

1)
不应与
(十进制8714)

要获取Java中的UTF-16字符代码,请调用
charAt()
并将其强制转换/分配到
int

String s = "∈"; // scanner.nextLine() returns a string; I'm just using String here as MRE
char[] text = s.toCharArray();
String newString = new String(text);
System.out.println(newString);
String String=scanner.nextLine();
对于(int i=0;i

上述代码将为
字符。

您正在使用
字节
作为数据类型–既在
getBytes()
中,也在
字节[]文本
中–这不支持您尝试使用的值(例如“∈").

在Java中,
byte
的范围为-128到127()。另一方面,
char
数据类型的功能更强:

char数据类型是单个16位Unicode字符。它的最小值为“\u0000”(或0),最大值为“\uffff”(或65535)

如果您在代码中使用
char
,事情将按预期进行。首先,通过调用
tocharray()
获取字符数组(而不是字节)。然后将
text
定义为
char[]
而不是
byte[]

下面的示例将打印“∈“:


那个角色在哪里?”∈“不在ASCII字符集中。但没关系;Java不使用ASCII。扫描仪的输入可以提供什么是一个开放的问题。这是打印
8712
,他是否只是错误地认为它的值是
8714
?@Nexevis查看
(8712)和
(8714)@Andreas Ah感谢您的澄清,这让人很困惑。原始代码转换字符串数据(来自
scanner.nextLine()
)到字节数组,然后返回到字符串。问题是,为什么他们在字符串的最终副本中看到意外结果。OP必须说明进行此转换的原因,但我的回答显示了如何进行类似转换,并在最后获得一个工作字符串。此代码块抛出:� : 65533.事实上,所有答案都提出了同样的问题。@BrandonRG这可能是因为
扫描仪正在从控制台读取数据,而控制台没有设置UTF-8,因此控制台甚至无法获取
字符。这不是Java的问题,而是控制台窗口的问题。--或者,如果
扫描仪正在读取文件,则文件的字符编码错误。