java - 试图解决 - 字符串索引超出范围
问题描述
我收到此错误:
Carregando os mapas: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String
index out of range: 4800
at java.lang.String.substring(Unknown Source)
at estaticos.Criptografador.descompilarMapaData(Criptografador.java:147)
at variables.Mapa.<init>(Mapa.java:1306)
at estaticos.GestorSQL.CARREGAR_MAPAS(GestorSQL.java:696)
at estaticos.MundoDofus.criarServer(MundoDofus.java:1398)
at estaticos.VrauEMU.main(VrauEMU.java:130)
我正在尝试解决,但我不能。
我的代码:(原来的模拟器是西班牙文,所以celula = celda之前)
public static Map<Integer, Celula> descompilarMapaData(Mapa mapa, String dData) {
Map<Integer, Celula> celulas = new TreeMap<Integer, Celula>();
for (int f = 0; f < dData.length(); f += 10) {
String CellData = dData.substring(f, f + 10);
List<Byte> celulaInfo = new ArrayList<Byte>();
for (int i = 0; i < CellData.length(); i++)
celulaInfo.add((byte) getNumeroPorValorHash(CellData.charAt(i)));
int caminhavel = (celulaInfo.get(2) & 56) >> 3;// 0 = nao, 1 = meio, 4 = sim
boolean linhaDeVisao = (celulaInfo.get(0) & 1) != 0;
int layerObject2 = ( (celulaInfo.get(0) & 2) << 12) + ( (celulaInfo.get(7) & 1) << 12) + (celulaInfo.get(8) << 6)
+ celulaInfo.get(9);
boolean layerObjeto2Interac = ( (celulaInfo.get(7) & 2) >> 1) != 0;
int objeto = (layerObjeto2Interac ? layerObject2 : -1);
celulas.put(f / 10, new Celula(mapa, f / 10, caminhavel != 0, linhaDeVisao, objeto));
}
return celulas;
解决方案
问题在于迭代边界:
for (int f = 0; f < dData.length(); f += 10) {
String CellData = dData.substring(f, f + 10);
除非dData.length()
碰巧能被 10 整除,否则这将迭代超出范围。为了说明,下面的代码片段将尝试读取 0-10 和 10-20,即使虚构的数组边界仅为 0-15。
for (let i = 0; i < 25; i += 10)
console.log(i, i + 10);
也许简单地限制上限substring.length()
就足够了:
for (int f = 0; f < dData.length(); f += 10) {
int upperBound = min(f + 10, dData.length());
String CellData = dData.substring(f, upperBound));
推荐阅读
- amazon-web-services - 有没有办法对 dynamodb 中的复合 GSI 强制执行唯一约束
- java - 仅在收到匹配的 int 标志时更新某些值
- html - 我可以申请不同的吗
- 使用类的样式
- sql - 当我的“WHERE CASE WHEN”评估为假时,我的 sql HAVING 子句似乎没有运行
- html - 我想使用键值管道而不从对象接收 id
- swiftui - 从环境变量初始化的 var 预览问题
- c# - 使用 C# 向生产者发送消息时如何在 kafka 消息中添加标头属性?
- c# - 有没有办法使用动画 gif 作为 ImageBrush 的 ImageSource?
- macos - 如何在 Mac OSX 上使用 IDLE 在 Python 3.7 中监控按键
- node.js - 如何真正使用 Postman 的授权?