Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用标记替换文件中的字符串_Java_String_Replace - Fatal编程技术网

在Java中使用标记替换文件中的字符串

在Java中使用标记替换文件中的字符串,java,string,replace,Java,String,Replace,尝试替换文件中的字符串时出现问题。 在我的档案中,我有: <!-- Header --> <header fontName="Arial" size="24"/> <!-- Content --> <content> <fontName="Arial" size="11"/> </content> 但它只是替换所有要替换的文本。如果您确定这是文件的格式,只需执行以下操作: String newtext = oldt

尝试替换文件中的字符串时出现问题。 在我的档案中,我有:

<!-- Header -->
<header fontName="Arial" size="24"/>
<!-- Content -->
<content>
    <fontName="Arial" size="11"/>
</content>

但它只是替换所有要替换的文本。

如果您确定这是文件的格式,只需执行以下操作:

String newtext = oldtext.replaceAll("header fontName=\"Arial\"", "header fontName=\"Times New Roman\"");

顺便说一下,使用
StringBuilder
附加字符串。

如果您确定这是文件的格式,只需执行以下操作即可:

String newtext = oldtext.replaceAll("header fontName=\"Arial\"", "header fontName=\"Times New Roman\"");

顺便说一句,使用
StringBuilder
附加字符串。

在您的读取循环
中((line=reader.readLine())!=null)
您可以测试是否找到
行(而不是
行),并仅在标题块中进行替换

boolean inHeader == false;
while((line = reader.readLine()) != null) {
    if (line.equals("<!-- Header -->")) {
        inHeader = true;
    } else if (line.equals("<!-- Content -->")) {
        inHeader = false;
    }
    if (inHeader) {
        line = line.replaceAll("Arial", "Times New Roman");
    }
    oldtext += line + "\r\n";
}

编辑:检测任意标记可能比硬编码标题和内容更干净。这需要一个正则表达式来匹配
,并测试标记是否等于
“Header”
,但这种方法当然更简单。

在您的读取循环
中((line=reader.readLine())!=null)
您可以测试是否找到了
行(而不是
行),并且只在标题块中进行替换

boolean inHeader == false;
while((line = reader.readLine()) != null) {
    if (line.equals("<!-- Header -->")) {
        inHeader = true;
    } else if (line.equals("<!-- Content -->")) {
        inHeader = false;
    }
    if (inHeader) {
        line = line.replaceAll("Arial", "Times New Roman");
    }
    oldtext += line + "\r\n";
}

编辑:检测任意标记可能比硬编码标题和内容更干净。这将需要一个正则表达式来匹配
,并测试标记是否等于
“Header”
,但这种方法当然更简单。

实际上,像这样的格式
,它将与
格式相同。我之所以使用它,是因为我想修改jasper的.jrxml文件。我想说的是使用
StringBuilder
而不是
StringBuffer
——除非他需要同步,否则这将是不必要的开销。@fanjavaid请澄清你的问题。实际上,像这样的格式
,它将与
格式相同。我之所以使用它,是因为我想修改jasper的.jrxml文件。我想说的是使用
StringBuilder
而不是
StringBuffer
——除非他需要同步,否则这将是不必要的开销。@fanjavaid请澄清您的问题。很抱歉,我如何检测它是否还没有
?因为在循环中,如果我找到
,我会替换字符串,并且循环仍然运行到文件的最后一行。很抱歉,我如何检测它是否还没有
?因为在循环中,如果我找到
,我将替换字符串,循环将一直运行到文件的最后一行。