我有一个StringBuffer,它包含过去来自文件的多行,所有这些都是基于较大行的模式合并在一起进行比较。在进行了更改之后,我基本上需要撤消将这些行合并在一起以重新写入新的StringBuffer来重新写入原来的文件。
例如,该文件包含这样的一行(全部在一行上):
'macro NDD89 Start;Load; shortDescription; macro(continued) stepone;steptwo,do stuff macro(continued) stepthree;more steps; do stuff macro(continued) finalstep'
我需要将该行重写为多行(在有字符串“macro(continue)”的地方分割):
macro NDD89 Start;Load; shortDescription;
macro(continued) stepone;steptwo,do stuff
macro(continued) stepthree;more steps; do stuff
macro(continued) finalstep'
如果有帮助,这是我的代码片段,它将原始文件放在多行中的第一部分,并将它们组合成组并写入新文件:
StringBuffer sb = new StringBuffer();
Buffer = new FileReader(C:/original.txt);
BufferedReader User_File = new BufferedReader(Buffer);
String Line_of_Text;
while((Line_of_Text = User_File.readLine()) != null){
if(Line_of_Text.startsWith("macro ")){
sb.append("\n"+Line_of_Text);
}else if(Line_of_Text.startsWith("macro(continued)")){
sb.append(Line_of_Text);
}else{
sb.append(Line_of_Text+"\n");
}
}
BufferedWriter OutFile = new BufferedWriter(new FileWriter("C:/newFile.txt"));
OutFile.write(sb.toString());
OutFile.flush();
OutFile.close();
我一直坚持这样做的方式,任何建议/想法?
答案 0 :(得分:0)
我希望String类中的split()和contains()方法可以帮助你。
答案 1 :(得分:0)
问题是你有一个没有行的大字符串。您可以输入if(Line_of_Text.startsWith("macro ")){
来测试行System.out.println(Line_of_Text);
上方的内容。你可以看到出了什么问题。
我将您的附加代码更改为:
String Line_of_Text = null;
while ((Line_of_Text = User_File.readLine()) != null) {
Line_of_Text = User_File.readLine();
String[] splitted = Line_of_Text.split("macro ");
for (String part : splitted) {
sb.append(part+"\n");
}
}
这利用.split()
方法将String拆分为String数组。您可以使用该数组中的项目进行追加。
.split()
采用正则表达式分隔符,因此您可以尝试:Line_of_Text.split("macro|macro\\(continued\\)");
答案 2 :(得分:0)
您可以对给定令牌使用String#split
来分割String
。
示例强>
String test = "'macro NDD89 Start;Load; shortDescription; macro(continued) stepone;steptwo,do stuff macro(continued) stepthree;more steps; do stuff macro(continued) finalstep'";
// // splits into String array, by
// // | followed by...
// // | | literal text
// // | | | double-escape on parenthesis, as
// // | | | this is a regex pattern
String[] splitted = test.split("(?=macro\\(continued\\))");
System.out.println("Raw:\r\n");
// prints the raw array (hard to read, as inline)
System.out.println(Arrays.toString(splitted));
// creates a list from the array and print each element one per line, trimmed
List<String> splittedList = Arrays.asList(splitted);
System.out.println("\r\nNice:\r\n");
for (String s: splittedList) {
System.out.println(s.trim());
}
<强>输出强>
Raw:
['macro NDD89 Start;Load; shortDescription; , macro(continued) stepone;steptwo,do stuff , macro(continued) stepthree;more steps; do stuff , macro(continued) finalstep']
Nice:
'macro NDD89 Start;Load; shortDescription;
macro(continued) stepone;steptwo,do stuff
macro(continued) stepthree;more steps; do stuff
macro(continued) finalstep'
答案 3 :(得分:0)
最简单的解决方案!
String x =oneLine.replace(" macro", "\nmacro");
答案 4 :(得分:0)
快速修复QuakCore的答案。
String breaker = "macro(continued)";
String x =oneLine.replace(" "+breaker, "\n"+breaker);