gpt4 book ai didi

java - StringBuilder 上的 IndexOutOfBoundException

转载 作者:行者123 更新时间:2023-12-02 02:56:22 26 4
gpt4 key购买 nike

我尝试使用以下代码将 pi 替换为 *pi,但是它引发了完全意外的异常。匹配器如何查看高于字符串长度的索引?

private void makeEvaluationStringExpressionMXParserCompliant() {
Pattern multiply = Pattern.compile(mContext.getString(R.string.string_multiply));
Pattern pi = Pattern.compile(mContext.getString(R.string.string_pie));
Pattern e = Pattern.compile(mContext.getString(R.string.string_e));

Log.e("wingoku", "pi: "+ pi.toString() + " completeString: "+ mEvaluationStringExpressionBuilder.toString());

replaceAll(mEvaluationStringExpressionBuilder, pi, "*pi");
}

private void replaceAll(StringBuilder sb, Pattern pattern, String replacement) {
Matcher m = pattern.matcher(sb);
int start = 0;
while (m.find(start)) {
sb.replace(m.start(), m.end(), replacement);
start = m.start() + replacement.length();
}
}

异常(exception):

 java.lang.IndexOutOfBoundsException: start=3; length=2
at java.util.regex.Matcher.find(Matcher.java:339)
at com.app.calculator.utils.StringExpressionFactory.replaceAll(StringExpressionFactory.java:68)
at com.app.calculator.utils.StringExpressionFactory.makeEvaluationStringExpressionMXParserCompliant(StringExpressionFactory.java:61)
at com.app.calculator.utils.StringExpressionFactory.createExpression(StringExpressionFactory.java:31)

最佳答案

问题在于您传递的初始索引超出了您尝试在其中查找匹配项的字符串的长度。方法文档说明如下:

Throws: IndexOutOfBoundsException - If start is less than zero or if start is greater than the length of the input sequence.

您需要添加检查以查看初始索引是否有效:

while (start < sb.length() && m.find(start)) {
sb.replace(m.start(), m.end(), replacement);
start = m.start() + replacement.length();
}

关于java - StringBuilder 上的 IndexOutOfBoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43023255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com