2

在 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 开始。我如何有效地读取这些数字?

4

4 回答 4

1
Integer.parseInt(s1.replaceAll("[\\D]", ""))
于 2013-05-02T07:42:07.747 回答
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);
}
于 2013-05-02T07:37:03.453 回答
0

如果您不想分配新的String,那么您可以使用其他 SO 答案中的代码:

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())

于 2013-05-02T08:03:03.260 回答
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
于 2013-05-02T10:29:46.417 回答