首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将左填充字符串转换为数字

将左填充字符串转换为数字
EN

Stack Overflow用户
提问于 2015-10-19 19:25:12
回答 4查看 731关注 0票数 2

在Java 6中,如果我有一个长度为11的String,其中包含一个负数,它用零填充,并且我想把它转换成Long,那么我该怎么做呢?

代码语言:javascript
运行
复制
String x = "000000-3946";

try {
    Long.parseLong(x)
} catch (ParseException e) {
    e.printStackTrace();
}

...throws a NumberFormatException

通过移除前导零是我让它工作的唯一方法。我尝试使用NumberFormatDecimalFormat类进行解析。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-10-19 19:38:29

第二个状态将通过使用正则表达式并为您提供一个可以解析为长值的有效字符串来删除前面的所有零。(处理正数和负数)

代码语言:javascript
运行
复制
String x = "000000-3946";
String xWithoutLeadingZeros = x.replaceFirst("^0+", "");
System.out.println(Long.parseLong(xWithoutLeadingZeros));

来自评论:

上面的代码replaceFirst实际上将为每个调用在内部创建模式对象。

代码语言:javascript
运行
复制
//code of String.replaceFirst
return Pattern.compile(regex).matcher(this).replaceFirst(replacement);

由于我们对大量输入使用此方法,所以每次创建模式对象都不是正确的方法,因为对于所有输入,regEx都是相同的。

因此,我们将只创建模式对象一次,希望它能提供更好的性能结果。

代码语言:javascript
运行
复制
private static final Pattern leadingZeroPattern = Pattern.compile("^0+");
private static final String EMPTY_STRING = "";

public static void main(String[] args) {
    String x = "-232330000809";
    String xWithoutZeros = leadingZeroPattern.matcher(x).replaceFirst(EMPTY_STRING);
    System.out.println(Long.parseLong(xWithoutZeros));
}

#优化事项

票数 3
EN

Stack Overflow用户

发布于 2015-10-19 19:34:47

首先,Long.parseLong(String)可以抛出NumberFormatException。接下来,我会检查一个减号,如果有,从那个位置取一个子字符串。有点像

代码语言:javascript
运行
复制
String x = "000000-3946";
int p = x.indexOf("-") > -1 ? x.indexOf("-") : 0;
try {
    long l = Long.parseLong(x.substring(p));
    System.out.println(l);
} catch (NumberFormatException nfe) {
    nfe.printStackTrace();
}

输出

代码语言:javascript
运行
复制
-3946
票数 1
EN

Stack Overflow用户

发布于 2015-10-19 19:37:41

有点过火了,但这会起作用的:

代码语言:javascript
运行
复制
final String x = "000000-3946";
int start = x.indexOf("-");

System.out.printf("%s%n", Long.parseLong(x.substring((start > -1) ? start : 0, x.length())));
// ...or just
//System.out.printf("%s%n", Long.parseLong(x.substring((start > -1) ? start : 0)));

输出-3946

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33222289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档