有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从字符串末尾获取整数(可变长度)

我有一个长度可变的字符串,字符串的末尾是一些数字。解析字符串并从末尾获取整数的最佳/高效方法是什么

字符串和末尾的数字可以是任意长度。例如:

abcd123 --> 123
abc12345 --> 12345
ab4cd1 --> 1

共 (3) 个答案

  1. # 1 楼答案

    public int getIntFromEndOfString(String inpStr){
        int revVal = 0;
        boolean flag = false;
        String reverseNo  = "", result = "";
        for (int i = inpStr.length()-1; i >= 0 ; i--) {
            reverseNo = String.valueOf(inpStr.charAt(i));
            if(!flag)
            if(reverseNo.equals("0") ||reverseNo.equals("1") || reverseNo.equals("2") || reverseNo.equals("3")
                    | reverseNo.equals("4") || reverseNo.equals("5") || reverseNo.equals("6") || reverseNo.equals("7")
                    || reverseNo.equals("8") || reverseNo.equals("9")){
                revVal = Integer.parseInt(reverseNo);
                result+= String.valueOf(revVal);
            }else{
                inpStr = result;
                i = inpStr.length();
                flag = true;
                result = "";
            }else{
                result += reverseNo;
            }
        }
        revVal = Integer.parseInt(result);
        return revVal;
    }
    
  2. # 2 楼答案

    这里提供的其他解决方案也不错,所以我将提供这一个,只是为了有点不同:

    public static BigInteger lastBigInteger(String s) {
        int i = s.length();
        while (i > 0 && Character.isDigit(s.charAt(i - 1))) {
            i--;
        }
        return new BigInteger(s.substring(i));
    }
    
    • 它手动查找最后一个非Character.isDigit(char)
      • 如果输入都是数字,它仍然有效
    • 它使用BigInteger,因此它可以在非常长的字符串末尾处理非常大的数字。
      • 使用Integer.parseIntLong.parseLong如果其中任何一个无效
  3. # 3 楼答案

    int getTrailingInteger(String str)
    {
        int positionOfLastDigit = getPositionOfLastDigit(str);
        if (positionOfLastDigit == str.length())
        {
            // string does not end in digits
            return -1;
        }
        return Integer.parseInt(str.substring(positionOfLastDigit));
    }
    
    int getPositionOfLastDigit(String str)
    {
        int pos;
        for (pos=str.length()-1; pos>=0; --pos)
        {
            char c = str.charAt(pos);
            if (!Character.isDigit(c)) break;
        }
        return pos + 1;
    }