【问题标题】:Extract number in a String java提取字符串java中的数字
【发布时间】:2015-04-28 10:26:14
【问题描述】:

我有一个非常简单的问题是我有一个字符串 0-1000 说str = "0-1000"

我使用str.split("-")成功提取了0和1000

现在,我被分配检查这个数字,因为我注意到这两个数字可能是负数。

如果我继续str.split("-"),那么我也会跳过负号。

谁能为我推荐一些方法?

【问题讨论】:

  • 请贴一个包含负数的字符串示例
  • 您能否举个例子说明包含负数的字符串的外观?这会是 0--1000 吗?
  • @JohannisK 我已经编辑了一个例子

标签: java string split


【解决方案1】:

由于String.split() 使用正则表达式进行拆分,您可以这样做:

String[] nos = "-1000--1".split("(?<=\\d)-";

这意味着您在数字后面的减号字符处拆分,即必须是运算符。

请注意,(?&lt;=\d) 需要使用正向后视,因为您只想匹配减号字符。 String.split() 会删除所有匹配的分隔符,因此像 \d- 这样的东西也会删除数字。

要解析数字,您需要遍历数组元素并调用Integer.valueOf(element)Integer.parseInt(element)

请注意,这假定输入字符串是有效的。根据您想要实现的目标,您可能首先必须检查输入是否匹配,例如通过使用-?\d--?\d 来检查字符串是否为x-y 格式,其中xy 可以是正整数或负整数。

【讨论】:

  • 哦,谢谢,但您示例中的 -1000 仍然是一个字符串。
  • 它知道1000是一个数字吗
  • @rickyma924 - 将其解析为 Integer 使用 Integer.parseInt()
  • @rickyma924 1000 不是数字,而是 4 位字符的字符串。正如 TheLostMind 已经评论的那样,无论如何您都需要将数字解析为整数。
  • 我知道parseInt的部分
【解决方案2】:

您可以像这样使用正则表达式:适用于所有情况

public static void main(String[] args) {
    String s = "-500--578";
    String[] arr = s.split("(?<=\\d)-"); // split on "-" only if it is preceeded by a digit
    for (String str : arr)
        System.out.println(str);
}

O/P:

-500
-578

【讨论】:

  • @JordiCastilla - 你喜欢它就像你讨厌它一样? :P
  • 它 \\d\\- 足以做我想做的事吗?
  • @rickyma924 不,因为您不希望数字成为分隔符的一部分。因此,您需要使用零宽度正向后视,即(?&lt;=\d)
  • @TheLostMind 是的……我爱他们,因为他们超级强大……但我讨厌他们,因为我对他们很不好……XD
  • 其实我还是不明白 "(?
猜你喜欢
  • 2018-10-25
  • 2020-06-10
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多