Java 向字符串添加执行多个子字符串操作的条件以避免IndexOutfrange异常的最佳实践

Java 向字符串添加执行多个子字符串操作的条件以避免IndexOutfrange异常的最佳实践,java,string,substring,Java,String,Substring,我有一根长度不确定的绳子。比如说 下面这根绳子的长度是199。索引从0到198 string str = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley

我有一根长度不确定的绳子。比如说
下面这根绳子的长度是199。索引从0到198

string str = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type"; 
这里我执行子字符串操作来提取内容。看起来像这样

Map<String,String> values = new HashMap<>();
values.put("key1",str.subString(0,20));
values.put("key2",str.subString(20,55));
...
...
values.put("key3",str.subString(172,198));
Map values=newhashmap();
put(“key1”,str.subString(0,20));
put(“键2”,str.subString(20,55));
...
...
value.put(“key3”,str.subString(172198));
和以上代码的工作,因为我知道的长度。但有时,长度对我来说是不确定的。在这些情况下,如何验证内容?具体来说,我应该为每个子字符串使用if条件吗?如果是的话,我应该这样添加吗

 if(str.length() >= 20 && str.length < 55) {
    values.put("key1",str.subString(0,20));
 }
 if(str.length() >= 55 && str.length < 70) {
    values.put("key2",str.subString(20,55);
 }
 ..
 ..
 if(str.length() >= 198) {
    values.put("key3",str.subString(172,197));
 }
if(str.length()>=20&&str.length<55){
put(“key1”,str.subString(0,20));
}
如果(str.length()>=55&&str.length<70){
值。put(“键2”,str.subString(20,55);
}
..
..
如果(str.length()>=198){
value.put(“key3”,str.subString(172197));
}

但这里的问题是,字符串长度可能会改变(可能是针对长度不同的字符串数组)有些内容可能不存在。我得到了IndexOutfrange例外条件。那么,你有什么建议?我需要遵循什么好的实践吗?

据我所知,你需要这样的东西。我希望这对你有所帮助:

String str=“abcdefghijklmnopqrstuvxyz012456789”;
映射值=新的HashMap();
整数计数=0;
而(str.length()>20){
value.put(“键”+计数,str.substring(0,21));
str=str.substring(21);
计数++;
}
值。put(“键”+计数,str);

编写一个函数来抽象提取值时需要遵循的规则:

void extractValue(Map<String, String> values, String source, String key, int valueStart, int valueEnd) {
        if (source.length() >= valueEnd) {
            values.put(key, source.substring(valueStart, valueEnd));
        }
    }
void extractValue(映射值、字符串源、字符串键、int-valueStart、int-valueEnd){
if(source.length()>=valueEnd){
value.put(key,source.substring(valueStart,valueEnd));
}
}

(我不理解您何时可以提取数据的规则,所以这只是一个示例)

当然,你需要在子字符串之前检查长度。我不清楚你到底在问什么,或者你有什么问题。如果你想提取的块的大小是固定的,那么你可以在
循环时简单地做这件事,检查长度是否应该大于或等于块大小,然后再执行ming子字符串操作。@MarkrotVeel问题是,我们一直在处理数组中每个索引的字符串。因此,在该字符串上,执行了几个我知道子字符串索引的子字符串操作。但问题是,有时,它会导致StringIndexOutfrange异常,这是因为,有时字符串长度不满足要求这并不能帮助我理解你真正的问题,请提供一个实际证明问题的例子。