代码之家  ›  专栏  ›  技术社区  ›  Brad Hein

获取字符串“600sp”整数部分的最佳方法?

  •  10
  • Brad Hein  · 技术社区  · 15 年前

    我有一个字符串,比如“600sp”,我想从中得到整数部分(600)。

    如果我这样做了 Integer.valueOf("600sp") 我得到一个异常,因为字符串中遇到了非数字值“s”。

    谢谢!

    6 回复  |  直到 15 年前
        1
  •  17
  •   Chuk Lee    15 年前

    如果您的字符串格式总是数字后跟一些字符,那么请尝试以下操作

    mystr.split("[a-z]")[0]
    
        2
  •  7
  •   Jherico    15 年前

    根据输入的限制,最好使用regex。

        Pattern p = Pattern.compile("(\\d+)");
        Matcher m = p.matcher("600sp");
        Integer j = null;
        if (m.find()) {
            j = Integer.valueOf(m.group(1));
        }
    

    这个正则表达式的意思是“在至少有一个数字的字符串开头给我一组连续的数字”。如果您有其他约束,比如解析实数而不是整数,那么您需要修改代码。

        3
  •  3
  •   Pablo Fernandez    15 年前

    对于较短且不太具体的解决方案,请添加更多上下文。

    StringBuffer numbers = new StringBuffer();
    for(char c : "asdf600sp".toCharArray())
    {
      if(Character.isDigit(c)) numbers.append(c);
    }
    
    System.out.println(numbers.toString());
    

    根据新信息,改进的解决方案:

    Integer.valueOf("600sp".replace("sp",""));
    
        4
  •  2
  •   Topera    15 年前

    你可以用

    Integer.valueOf("0" + "600sp".replaceAll("(\\d*).*", "$1"))
    


    编辑: "0" + 在我没有数字的时候不会崩溃。Tks@jherico!

        5
  •  1
  •   Thilo    15 年前

    只需测试它是否以“sp”结尾,然后解析不包含最后两个字符的子字符串。

        6
  •  1
  •   D.Shawley    15 年前

    我知道这个问题已经得到了回答,但你考虑过了吗 java.util.Scanner