Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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
将包含整型文字(dec、十六进制和oct符号)的java字符串解释为整数值_Java_String_Integer_Hex_Octal - Fatal编程技术网

将包含整型文字(dec、十六进制和oct符号)的java字符串解释为整数值

将包含整型文字(dec、十六进制和oct符号)的java字符串解释为整数值,java,string,integer,hex,octal,Java,String,Integer,Hex,Octal,我想将整数的字符串表示形式转换为实际的整数值。我不知道之前使用的是哪个基数/基,所以我不能简单地依赖于将基数作为参数的方法/构造函数(如图所示)。字符串可能表示无符号64位整数和其他大数字,因此使用java.lang.Integer不是一个选项 BigInteger bi = new BigInteger(s, 16); 有没有更好的方法来完成我试图用下面的代码所做的事情?java中是否有构造函数/方法允许自己将字符串解释为整数文本?我知道Python提供了在指定基数为0()时执行此操作的功能

我想将整数的字符串表示形式转换为实际的整数值。我不知道之前使用的是哪个基数/基,所以我不能简单地依赖于将基数作为参数的方法/构造函数(如图所示)。字符串可能表示无符号64位整数和其他大数字,因此使用
java.lang.Integer
不是一个选项

BigInteger bi = new BigInteger(s, 16);
有没有更好的方法来完成我试图用下面的代码所做的事情?java中是否有构造函数/方法允许自己将字符串解释为整数文本?我知道Python提供了在指定基数为
0
()时执行此操作的功能

import java.math.biginger;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
公共类词典整合器{
私有静态最终模式=
编译(“(\\+\)?(0(x)?)?([0-9a-fA-F]+)”;
私有部分getParts(字符串lex){//pun不是故意的
Matcher-Matcher=pattern.Matcher(lex);
布尔lookingAt=matcher.lookingAt();
如果(查找){
字符串符号=matcher.group(1);
整数基数;
字符串前缀=matcher.group(2);
如果(“0”。等于(前缀)){
基数=8;
}else如果(“0x.”等于(前缀)){
基数=16;
}否则{
基数=10;
}
字符串编号=匹配器组(4);
返回新部件(符号、基数、数字);
}
抛出新的NumberFormatException(“未知词汇表示”);
}
public BigInteger getLexToInt(字符串lex){
Parts=getParts(lex.trim());
返回新的BigInteger(parts.getNumber(),parts.getRadix());
}
公共静态void main(字符串[]args){
字符串hexLex=“0xf”;
字符串hexLexPlus=“+0xf”;
字符串hexlex减号=“-0xf”;
字符串octLex=“017”;
字符串octLexPlus=“+017”;
字符串octLexMinus=“-017”;
字符串decLex=“15”;
字符串decLexPlus=“+15”;
字符串declex减去=“-15”;
LexicalIntegerConverter=新的LexicalIntegerConverter();
System.out.println(hexLex+“=”+converter.getLexToInt(hexLex));
System.out.println(hexLexPlus+“=”+converter.getLexToInt(hexLexPlus));
System.out.println(hexLexMinus+“=”+converter.getLexToInt(hexLexMinus));
System.out.println(octLex+“=”+converter.getLexToInt(octLex));
System.out.println(octLexPlus+“=”+converter.getLexToInt(octLexPlus));
System.out.println(octLexMinus+“=”+转换器.getLexToInt(octLexMinus));
System.out.println(decLex+“=”+converter.getLexToInt(decLex));
System.out.println(decLexPlus+“=”+converter.getLexToInt(decLexPlus));
System.out.println(declexemission+“=”+converter.getLexToInt(declexemission));
}
私有静态类部件{
私有最终字符串符号;
私有最终整数基数;
私有最终字符串数字;
公共部分(字符串符号、整数基数、字符串数字){
这个符号=符号;
这个。基数=基数;
这个。数字=数字;
}
公共字符串getSign(){
返回标志;
}
公共整数getRadix(){
返回基数;
}
公共字符串getDigits(){
返回数字;
}
公共字符串getNumber(){
返回(符号==null?“:符号)+数字;
}
@凌驾
公共字符串toString(){
返回getNumber()+“[”+基数+“]”;
}
}
}
还有很多类似的问题,答案指向
Integer.parseInt(String,int)
biginger(String,int)
,但这不是我想要的答案。我也更喜欢在不依赖第三方库的情况下这样做。我还意识到java允许在代码中定义整型文字,这也不是我想要的答案(我实际上需要转换包含整型文字的字符串)——我想做java编译器遇到此类值时所做的事情

Edit01

我在上面说过,我不希望使用第三方库,但这并不意味着它不是一个选项

BigInteger bi = new BigInteger(s, 16);
这将把字符串解析为十六进制数,您只需要删除0x(或其他)前缀。 还可以看看标准JavaSEAPI的DecimalFormat类

如果您不想使用任何第三方库,并且您将自己限制为
Integer
值,则可以使用Java

如果您需要
biginger
s,也许可以使用以下简单的方法:

public BigInteger getLexToInt(String s)
{
    if (s.startsWith("0x"))
        return new BigInteger(s.substring(2), 16);
    else if (s.startsWith("+0x"))
        return new BigInteger(s.substring(3), 16);
    else if (s.startsWith("-0x"))
        return new BigInteger(s.replaceFirst("0x",""), 16);
    else if (s.startsWith("0"))
        return new BigInteger(s.substring(1), 8);
    else if (s.startsWith("+0"))
        return new BigInteger(s.substring(2), 8);
    else if (s.startsWith("-0"))
        return new BigInteger(s.replaceFirst("0",""), 8);
    else
        return new BigInteger(s);
}

@R.J:
整数。最大值可能小于等于我的字符串表示的值。出于特定原因,有时使用第三方库是好的。在您的情况下,您可以使用apachecommons@Foolish你指的是什么?它是否处理我的main方法中的符号?这正是我要寻找的,但是返回值是
java.lang.Integer
,它在内部使用
Integer.parseInt(String,int)
。不能处理大数字。你读过我的答案吗?来自中微子的样本-正是我所说的BigInteger:)