Java从字符串中间读取整数

时间:2013-05-02 07:35:54

标签: java android string integer

在Java中是否有可能有效地从字符串的随机位置读取整数?例如,我有一个

String s = "(34";
if (s.charAt(0) == '(')
{
    // How to read a number from position = 1 to the end of the string?
    // Of course, I can do something like
    String s1 = s.substring(1);
    int val = Integer.parseInt(s1);
}

但是它动态地创建了一个新的字符串实例,似乎太慢而且性能上升。

更新

嗯,确切地说:我有一个字符串数组“(ddd”,其中d是一个数字。所以我知道一个数字始终从pos = 1开始。我怎么能有效地读取这些数字?< / p>

4 个答案:

答案 0 :(得分:1)

在更新前回答:

我不是正则表达式的专家,但希望这个"\\d+"对你有用。使用模式调用以下方法: "\\d+"

public static int returnInt(String pattern,String inputString){
    Pattern intPattern = Pattern.compile(pattern);
    Matcher matcher = intPattern.matcher(inputString);
    matcher.find();
    String input = matcher.group();
    return Integer.parseInt(input);
}

答案 1 :(得分:0)

Integer.parseInt(s1.replaceAll("[\\D]", ""))

答案 2 :(得分:0)

如果您不想分配新的String,则可以使用this other SO answer中的代码:

int charArrayToInt(char[] data, int start, int end) throws NumberFormatException {
    int result = 0;
    for (int i = start; i < end; i++) {
        int digit = ((int)data[i] & 0xF);
        if ((digit < 0) || (digit > 9)) throw new NumberFormatException();
        result *= 10;
        result += digit;
    }
    return result;
}

您可以使用charArrayToInt(s.toCharArray(), 1, s.length())

进行调用

答案 3 :(得分:0)

更新后回答:

String是最终对象,您无法对其进行编辑,因此如果您想从中获取一些digit值,则可以采用以下两种方式:

1。使用您的代码可以正常使用,但如果您关心性能,请尝试2nd方式。

2。将您的字符串除以数字并添加它们以获得结果:

public static void main(String[] args) {
    String input = "(123456";

    if(input.charAt(0) == '(') {
        System.out.println(getDigit(input));
    }
}

private static int getDigit(String s) {
    int result = 0;
    int increase = 10;

    for(int i = 1; i < s.length(); i++) {
        int digit = Character.getNumericValue(s.charAt(i));
        result*=increase;
        result += digit;
    }

    return result;
}

输出:

123456