Parse(convert)包含数字的字符串到数字类型

时间:2016-02-12 12:27:50

标签: java string parsing type-conversion converter

java中从文本中提取数字并解析它的最佳实践是什么?

例如:

String s = "Availability in 20 days";

请不要仅仅依靠我正在寻找一个良好的一般做法和场景的例子。

谢谢。

5 个答案:

答案 0 :(得分:1)

使用正则表达式:

Pattern p = Pattern.compile("-?\\d+");
Matcher m = p.matcher("Availability in 20 days");
while (m.find()) {
  int number = Integer.parseInt(m.group());
  ...
}

答案 1 :(得分:1)

regex + replaceAll怎么样?

代码:

String after = str.replaceAll("\\D+", "");

答案 2 :(得分:1)

我不确定最佳做法,但我会在这个堆栈溢出问题中描述的一种方式。

How to extract numbers from a string and get an array of ints?

答案 3 :(得分:1)

我不确定你想做什么,但这里有一些可能对你有帮助的解决方案:

  1. 列出项目使用.indexOf和.substring来查找字符串中的数字

    • 示例:

      String s;
      String str = new String("1 sentence containing 5 words and 3 numbers.");
      ArrayList<Integer> integers = new ArrayList<Integer>();
      for (int i = 0; i <= 9; i++) {
          int start = 0;
          while (start != -1) {
              String sub = str.substring(start);
              int x = sub.indexOf(i);
              if (x != -1) {
                  s = sub.substring(x, x+1);
                  integers.add(Integer.parseInt(s));
                  start = x;
              } else {
                  //number not found
                  start = -1;
              }
          }
      }
      
  2. 一次提取一个字符并尝试解析它,如果没有例外,它就是一个数字。我绝对不会推荐这个解决方案,但它也应该有效。不幸的是,我无法告诉你哪种方法更快,但我可以想象 - 尽管命令较少 - 第二个版本较慢,考虑到有几个异常抛出。

    String s;
    int integ;
    ArrayList<Integer> integers = new ArrayList<Integer>();
    String str = new String("1 sentence containing 5 words and 3 numbers.");
    for (int i = 0; i < str.length(); i++) {
        s = str.substring(i,i+1);
        try {
            integ = Integer.parseInt(s);
            integers.add(integ);
        } catch (NumberFormatException nfe) {
            //nothing
        }
    }
    

答案 4 :(得分:0)

如果有多个数字则

String[] after = str.replaceAll("\\D+", " ").split("\\s+");