java - BigInteger 抛出 numberFormatException
问题描述
编辑:用下面的代码解决了这个问题:
String tokenId="0x1800000000001289000000000000000000000000000000000000000000000000";
BigInteger token1;
if (tokenId.startsWith("0x")){
token1=new BigInteger(tokenId.substring(2),16);
我有一个长字符串,我需要将其分配为 BigInteger 并将其传递给 Web3j 库的另一个方法。但是,我一直收到数字格式异常。对此有什么帮助吗?
下面是抛出异常的方法:
public void getBalance1155(String walletAddress) throws ExecutionException, InterruptedException {
//define constant values
Web3j web3j=Web3j.build(new HttpService("https://mainnet.infura.io/v3/<apiKey>>"));
String contractAddress = "0xfaaFDc07907ff5120a76b34b731b278c38d6043C";
BigInteger tokenId=new BigInteger("0x1800000000001289000000000000000000000000000000000000000000000000",16);
NoOpProcessor processor = new NoOpProcessor(web3j);
Credentials credentials = Credentials.create("privatekey");
TransactionManager txManager = new FastRawTransactionManager(web3j, credentials, processor);
//Query Blockchain to get balance of WALLETADDRESS from Contract for given TokenID
ERC1155 token = ERC1155.load(contractAddress, web3j, txManager, DefaultGasProvider.GAS_PRICE, DefaultGasProvider.GAS_LIMIT);
RemoteCall<BigInteger> sendCall = token.balanceOf(walletAddress, tokenId);
BigInteger balance=sendCall.sendAsync().get();
log.info("balance >>>>>> " +balance);
}
这是例外:
java.lang.NumberFormatException:对于输入字符串:“0x1800000000001289000000000000000000000000000000000000”在 java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 在 java.base/java.lang.Long.parseLong(Long.java: ) 在 java.base/java.lang.Long.parseLong(Long.java:817)
解决方案
0x
从字符串中删除无关的。
BigInteger
的构造函数的文档说
String 表示由一个可选的减号或加号组成,后跟指定基数的一个或多个数字序列。
[...]字符串不能包含任何无关的字符
没有提到像0x
(或0
八进制)这样的前缀。
推荐阅读
- r - 在 R 中使用“”
- java - 具有货币值动态掩码的文本字段 JavaFX(使用 TextFormatter)
- python-3.x - Git分支不显示任何结果
- php - 如何使用 php 从 MySQL 表中不同列的相同值中获取一个?
- javascript - 错误 instanceof X 没有按预期工作
- docker - 无法使用 Windows Docker 桌面上的 Kubernetes 连接到 NodePort 上的服务
- javascript - 使用 .load 从另一个页面加载内容会弄乱我当前的 css
- msal-react - 为非水疗应用程序实施 msal-react?
- assembly - 为什么 clang 为 64 位 double 的绝对值发出 32 位 float ps 指令?
- javascript - 错误 [ERR_HTTP_HEADERS_SENT]: 发送到客户端 Express EJS NODE 后无法设置标头