public String ReplaceCline(String laddr) {
if(text.contains("c="))
{
int a = text.length();
for(int i=0;i<a;i++)
{
int var1 = text.indexOf("IP4", i);
var1 = var1+ 4;
int var2 = var1+15;
text = text.replace(text.substring(var1, var2),laddr );
i = var2;
}
}
return text;
}
它的抛出索引超出界限错误。
必须替换设备发送的文本中的IP地址,该设备位于&#34; c =&#34;文中的一行。
答案 0 :(得分:1)
您可以使用正则表达式替换文本。
Pattern regex = Pattern.compile("c=IN IP4 (?:\\d{1,3}\\.){3}\\d{1,3}");
Matcher matcher = regex.matcher(text);
if (matcher.find()) {
text = matcher.replaceAll(
"c=IN IP4 "+laddr);
}
编辑: 这假设IN地址始终以IP4开头,并且该地址确实是IP4地址。为了与IP6兼容,您需要增加RegEx。
答案 1 :(得分:0)
索引超出界限应来自:
text = text.replace(text.substring(var1, var2),laddr );
因为:
int var1 = text.indexOf("IP4", i);
var1 = var1+ 4;
int var2 = var1+15;
然后var1和var2必须大于i,这可能超过text.length()
仔细检查该部分应该有所帮助。
答案 2 :(得分:0)
尝试StringUtils.subStringBetween
StringUtils.substringBetween(input, "c=IN IP4 ", " ");
输出:172.24.150.61
答案 3 :(得分:0)
您还必须检查indexOf的返回值:
int var1 = text.indexOf("IP4", i);
返回-1。
此外,您不应手动将数字添加到索引中。
更好的方法是使用text.indexOf(" ", var1+4);
检查第一个返回值后。
但最好的解决方案是使用@DeltaLima和@newuser
所述的Regex或StringUtils