0
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;
}

它的投掷指数越界错误。

必须替换文本中“c =”行中的设备发送的文本中的 IP 地址。

4

4 回答 4

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。

于 2013-09-10T09:35:35.253 回答
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()

仔细检查那部分应该有帮助。

于 2013-09-10T09:31:02.260 回答
0

试试StringUtils.subStringBetween

 StringUtils.substringBetween(input, "c=IN IP4 ", " ");

输出 :172.24.150.61

于 2013-09-10T09:36:44.400 回答
0

您还必须检查 indexOf 的返回值:

int var1 = text.indexOf("IP4", i);

如果在您的文本中找不到“IP4”,则返回 -1。

此外,您不应手动将数字添加到索引中。更好的方法是text.indexOf(" ", var1+4); 在检查第一个返回值后使用。

但最好的解决方案是使用 @DeltaLima 和 @newuser 所述的 Regex 或 StringUtils

于 2013-09-10T09:38:56.023 回答