在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请澄清您的问题。很抱歉,我如何检测它是否还没有
?因为在循环中,如果我找到
,我会替换字符串,并且循环仍然运行到文件的最后一行。很抱歉,我如何检测它是否还没有
?因为在循环中,如果我找到
,我将替换字符串,循环将一直运行到文件的最后一行。