AFAIK 在标准 Java 库中没有有效的方法来解析子字符串中的整数,而无需实际更新包含子字符串的新字符串。
我处于从字符串中解析数百万个整数的情况,并且我不想为每个子字符串创建新字符串。复制是我不需要的开销。
给定一个字符串 s,我想要一个类似的方法:
parseInteger(s, startOffset, endOffset)
语义如下:
Integer.parseInt(s.substring(startOffset, endOffset))
现在,我知道我可以这样写:
public static int parse(String s, int start, int end) {
long result = 0;
boolean foundMinus = false;
while (start < end) {
char ch = s.charAt(start);
if (ch == ' ')
/* ok */;
else if (ch == '-') {
if (foundMinus)
throw new NumberFormatException();
foundMinus = true;
} else if (ch < '0' || ch > '9')
throw new NumberFormatException();
else
break;
++start;
}
if (start == end)
throw new NumberFormatException();
while (start < end) {
char ch = s.charAt(start);
if (ch < '0' || ch > '9')
break;
result = result * 10 + (int) ch - (int) '0';
++start;
}
while (start < end) {
char ch = s.charAt(start);
if (ch != ' ')
throw new NumberFormatException();
++start;
}
if (foundMinus)
result *= -1;
if (result < Integer.MIN_VALUE || result > Integer.MAX_VALUE)
throw new NumberFormatException();
return (int) result;
}
但这不是重点。我宁愿从经过测试、受支持的第三方库中获取它。例如,解析 long 和正确处理 Long.MIN_VALUE 有点微妙,我通过将 int 解析为 long 来作弊。如果解析的整数大于 Long.MAX_VALUE,上面仍然存在溢出问题。
有没有这样的图书馆?
我的搜索几乎没有出现。