在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>
答案 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