需要提取java中多行中存在的特定字符串

时间:2013-09-10 09:21:26

标签: java string

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;文中的一行。

4 个答案:

答案 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);

如果在您的文本中找不到“IP4”,则

返回-1。

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

但最好的解决方案是使用@DeltaLima和@newuser

所述的Regex或StringUtils